No description
Find a file
Matt Davidson 6a6b51baf1
All checks were successful
Build and Publish Docker Image / build (push) Successful in 1m39s
Fix uppercase repository name in cache references
The build cache references were using github.repository directly,
which contains uppercase letters (Invoke-Systems). Docker registry
requires all lowercase. Added a step to convert the repository name
to lowercase and use it for all image and cache references.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 22:23:54 -07:00
.forgejo/workflows Fix uppercase repository name in cache references 2026-01-14 22:23:54 -07:00
.github/workflows action test 2026-01-11 23:02:46 -07:00
archetypes changes 2026-01-13 20:57:15 -07:00
config/_default initial transfer 2026-01-05 22:51:51 -07:00
content Use official Docker actions and add blog post about journey 2026-01-14 22:20:07 -07:00
data/json_resume changes 2026-01-13 20:57:15 -07:00
layouts changes 2026-01-13 20:57:15 -07:00
node_modules initial transfer 2026-01-05 22:51:51 -07:00
public initial transfer 2026-01-05 22:51:51 -07:00
resources/_gen/assets initial transfer 2026-01-05 22:51:51 -07:00
scripts initial transfer 2026-01-05 22:51:51 -07:00
static initial transfer 2026-01-05 22:51:51 -07:00
themes initial transfer 2026-01-05 22:51:51 -07:00
docker-compose.yml initial transfer 2026-01-05 22:51:51 -07:00
Dockerfile Remove git submodule handling from Dockerfile 2026-01-14 19:58:33 -07:00
go.mod changes 2026-01-13 20:57:15 -07:00
hugo.toml initial transfer 2026-01-05 22:51:51 -07:00
hugo_stats.json initial transfer 2026-01-05 22:51:51 -07:00
nginx.conf initial transfer 2026-01-05 22:51:51 -07:00
package-lock.json initial transfer 2026-01-05 22:51:51 -07:00
package.hugo.json initial transfer 2026-01-05 22:51:51 -07:00
package.json initial transfer 2026-01-05 22:51:51 -07:00
README.md initial transfer 2026-01-05 22:51:51 -07:00

Invoke-Wizard Blog

A Hugo blog for the InvokeSystems PowerShell module suite. Documents automation tools for Windows system administration.

Module Suite

This blog documents the following PowerShell modules:

  • InvokeSystems.Common - Shared helpers (event log initialization, admin context check)
  • InvokeSystems.RestrictedTask - Creates and manages restricted scheduled tasks with hash-verified payloads
  • InvokeSystems.UpdateRepair - Windows Update remediation with logging and optional event log integration
  • InvokeSystems.Generator - Secure random string, password, and GUID generation

All modules use the InvokeSystems.* prefix following Microsoft Graph naming conventions.

Function Naming Convention

Functions use the Inv prefix (Microsoft.Graph-style convention) so they're easy to spot in a session and don't collide with anything you already have:

Module Functions
InvokeSystems.Common Initialize-InvEventLogSource, Test-InvAdministratorContext
InvokeSystems.RestrictedTask Get-InvTask, New-InvTask, Remove-InvTask, Update-InvTask, Invoke-InvTask, Get-InvTaskPrincipal, Set-InvTaskPrincipal
InvokeSystems.UpdateRepair Invoke-InvUpdateRepair
InvokeSystems.Generator New-InvPassword, New-InvRandomString, New-InvGuid, New-InvRandomNumber

Building and Running the Hugo Site

The Hugo site is fully containerized with Docker. The Dockerfile handles everything:

# Build the image
docker build -t invoke-wizard-blog .

# Run the container
docker run -d -p 8080:80 --name invoke-wizard-blog invoke-wizard-blog

# Or use docker-compose
docker-compose up -d

The Dockerfile:

  • Initializes git submodules (Terminal theme)
  • Builds the minified Hugo site
  • Serves with nginx

Site will be available at http://localhost:8080.

For Nginx Proxy Manager

Point your proxy host to the container:

  • Backend: http://invoke-wizard-blog:80 (if using docker network)
  • Or: http://localhost:8080 (if exposing port directly)

CI/CD with GitHub Actions

Docker Build

Manually build and push Docker image to GitHub Container Registry:

  • Run from Actions tab → "Build and Push Docker Image" → Run workflow
  • See .github/workflows/docker-build.yml

Blog Post Ingestion

The blog automatically ingests posts from other repositories:

  • Source repos push changes → Triggers ingestion workflow
  • Posts land in staging (master branch)
  • Promote to production manually or on weekly schedule

See .github/workflows/README.md for details.

Manually publish modules to PSGallery:

  • Run from Actions tab → "Publish to PowerShell Gallery" → Run workflow
  • Publishes all modules: InvokeSystems.Common, InvokeSystems.RestrictedTask, InvokeSystems.UpdateRepair, InvokeSystems.Generator
  • Skips if version already exists
  • Requires PSGALLERY_API_KEY secret
  • See .github/workflows/publish-psgallery.yml

Quick Start:

  1. Get API key from https://www.powershellgallery.com/account
  2. Add as repository secret: PSGALLERY_API_KEY
  3. Update module manifests (Author, LicenseUri, ProjectUri)
  4. Run workflow from Actions tab to publish