All symptoms日本語

T10

$variables in a powershell -Command one-liner vanish before it runs

Symptom

powershell -Command "foreach ($i in 1..2) { $i }" fails with a syntax error. The code is fine; the child PowerShell received foreach ( in 1..2).

Check it in 30 seconds

Paste into Windows PowerShell 5.1. It only creates files under your %TEMP% folder. If the last line says REPRODUCED, it happens on your machine.

$d = Join-Path $env:TEMP ('cc-trap-' + (Get-Date -Format 'yyyyMMddHHmmss')); New-Item -ItemType Directory $d -Force | Out-Null
powershell -NoProfile -Command "foreach ($i in 1..2) { $i }"; $e = $LASTEXITCODE
"exit=$e"
if ($e -ne 0) { 'REPRODUCED' } else { 'NOT REPRODUCED' }

Why it happens

Inside double quotes the calling PowerShell expands $i first (to nothing) and passes the result to the child.

Fix

Put the logic in a .ps1 and run it with -File. For a one-liner, use single quotes.

powershell -NoProfile -File .\job.ps1
powershell -NoProfile -Command 'foreach ($i in 1..2) { $i }'

On the author's machine

syntax error, exit 1

Author's machine: Windows 11 / Windows PowerShell 5.1.26100 / Python 3.13.7 / Claude Code 2.1.304, Japanese Windows (code page 932). Checked 2026-10-20 to 22.

If you searched for

Related

cc-win-kit bundles the parts that avoid these traps from the start: a write guard (with onFailure: block), an unattended runner, a doctor that scans your files and hook settings, CLAUDE.md templates and the full test suite.

cc-win-kit ($19 on Payhip)

Other symptoms