From 27e5264714de28c23f3c58c6df6ed5102f288960 Mon Sep 17 00:00:00 2001 From: Justin Paul Date: Fri, 8 May 2026 08:53:04 -0400 Subject: [PATCH] Replace em-dashes in PowerShell scripts with ASCII hyphens PowerShell 5.1 reads .ps1 files as the local ANSI codepage by default, so non-ASCII characters get garbled. An em-dash inside a string literal broke install-service.ps1 with a parser error. Sticking to ASCII in script source avoids the entire class of issue. Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/deploy.ps1 | 4 ++-- scripts/dev-launch.ps1 | 2 +- scripts/install-service.ps1 | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/deploy.ps1 b/scripts/deploy.ps1 index c20b25d..1c12796 100644 --- a/scripts/deploy.ps1 +++ b/scripts/deploy.ps1 @@ -4,7 +4,7 @@ running under LocalSystem. .DESCRIPTION - Idempotent — safe to re-run after code changes. Stops the service first so binaries + Idempotent - safe to re-run after code changes. Stops the service first so binaries aren't locked, copies the latest published output to InstallRoot, then re-creates or re-configures the service and starts it. @@ -15,7 +15,7 @@ .PARAMETER ServiceAccount Service identity. Defaults to LocalSystem. For AD-aware hooks pass a domain user - or gMSA — see the Service account section in README.md. + or gMSA - see the Service account section in README.md. .PARAMETER SkipBuild Skip the dotnet publish step (use the existing publish\ output as-is). diff --git a/scripts/dev-launch.ps1 b/scripts/dev-launch.ps1 index 8330b20..642d847 100644 --- a/scripts/dev-launch.ps1 +++ b/scripts/dev-launch.ps1 @@ -4,7 +4,7 @@ pointing at an isolated data root so production %ProgramData% is not touched. .DESCRIPTION - MUST be run from an elevated PowerShell — the admin pipe is ACL'd to SYSTEM + MUST be run from an elevated PowerShell - the admin pipe is ACL'd to SYSTEM and the Administrators group, and a non-elevated process cannot connect. #> [CmdletBinding()] diff --git a/scripts/install-service.ps1 b/scripts/install-service.ps1 index a3531e7..1c8894b 100644 --- a/scripts/install-service.ps1 +++ b/scripts/install-service.ps1 @@ -14,8 +14,8 @@ .PARAMETER ServiceAccount Account to run the service under. Defaults to LocalSystem. For Active-Directory-aware hooks pass a domain user (DOMAIN\user) or a gMSA - (DOMAIN\svc-name$ — note the trailing $). Domain users require -Password. - Never pass LocalService — it has no network identity and cannot reach a DC. + (DOMAIN\svc-name$ - note the trailing $). Domain users require -Password. + Never pass LocalService - it has no network identity and cannot reach a DC. .PARAMETER Password Password for a domain-user account. Not required for LocalSystem, NetworkService, @@ -48,7 +48,7 @@ if (-not (Test-Path -LiteralPath $BinaryPath)) { throw "Binary not found: $BinaryPath" } -# sc.exe argv format: "key= value" — space AFTER equals, none before. +# sc.exe argv format: "key= value" - space AFTER equals, none before. $obj = $ServiceAccount # Get-Service returns $null when the service doesn't exist; sc.exe query is unreliable # because it writes a FAILED line to stdout that makes truthy checks pass. @@ -84,7 +84,7 @@ if ($LASTEXITCODE -ne 0) { Write-Warning "sc.exe failure returned $LASTEXITCODE Write-Host "Starting service '$ServiceName'..." sc.exe start $ServiceName -if ($LASTEXITCODE -ne 0) { throw "sc.exe start failed with exit code $LASTEXITCODE — check Event Viewer (Windows Logs > Application) for details" } +if ($LASTEXITCODE -ne 0) { throw "sc.exe start failed with exit code $LASTEXITCODE - check Event Viewer (Windows Logs > Application) for details" } Start-Sleep -Seconds 1 sc.exe query $ServiceName