一覧へEnglish

T11

Get-ChildItem の -Include が効かず、全部のファイルが返る

症状

Get-ChildItem -LiteralPath $dir -Recurse -Include *.ps1 なのに、.md や .json まで返る。後ろの処理が関係ないファイルまで触る。

30秒で確かめる

PowerShell(Windows PowerShell 5.1)に貼って実行します。一時フォルダ(%TEMP% の下)にだけファイルを作ります。最後に REPRODUCED と出たら、あなたの PC で起きています。

$d = Join-Path $env:TEMP ('cc-trap-' + (Get-Date -Format 'yyyyMMddHHmmss')); New-Item -ItemType Directory $d -Force | Out-Null
New-Item -ItemType Directory "$d\inc" -Force | Out-Null
[IO.File]::WriteAllText("$d\inc\a.ps1", 'x'); [IO.File]::WriteAllText("$d\inc\b.md", 'x')
$n = @(Get-ChildItem -LiteralPath "$d\inc" -Recurse -File -Include *.ps1).Count
"matched $n files for -Include *.ps1 (expected 1)"
if ($n -eq 2) { 'REPRODUCED' } else { 'NOT REPRODUCED' }

なぜ起きるか

Windows PowerShell 5.1 では、-LiteralPath と -Include を一緒に使うと -Include が無視される。エラーは出ない。

直し方

-Include を使わず、Where-Object で拡張子を絞る。

Get-ChildItem -LiteralPath $dir -Recurse -File |
  Where-Object { $_.Extension -eq '.ps1' }

作者の PC での結果

.md も返った(2件)

作者の PC: Windows 11 / Windows PowerShell 5.1.26100 / Python 3.13.7 / Claude Code 2.1.304、日本語の Windows(コードページ 932)。2026-10-20〜22 に確認。

こんな言葉で探した人へ

関連

この穴を最初から踏まないようにした部品(書き込み先を絞る安全装置〈onFailure: block 付き〉、夜の無人実行、ファイルとフックの設定を調べる健康診断、CLAUDE.md の型、試験一式)は cc-win-kit にまとめています。

cc-win-kit 英語版(Payhip、19ドル。日本語版は 2026年10月31日に note で公開)

ほかの症状