Skip to content

原文(日本語に翻訳)

Windows上のPowerShellツール:PS 5.1の引数分割強化として、ダブルクォートとスペースの両方を含む引数を持つ外部コマンドは自動許可ではなく確認を求めるようになりました。

原文(英語)

PowerShell tool on Windows: external-command arguments containing both a double-quote and whitespace now prompt instead of auto-allowing (PS 5.1 argument-splitting hardening)

概要

Windows PowerShell 5.1では、引数にダブルクォート(")とスペースの両方が含まれる場合に引数の分割(argument splitting)が予期しない動作をする既知の問題があります。v2.1.89では、このような引数を含む外部コマンドの実行を自動的に許可する代わりに、ユーザーに確認を求めるよう変更されました。セキュリティ強化の一環として、意図しないコマンド実行を防ぎます。

基本的な使い方

powershell
# 通常のコマンド(問題なし)
git push origin main
npm install

# ダブルクォートとスペースを含む引数(確認が必要に)
# 例: ファイル名にスペースとクォートが含まれる場合
some-tool.exe "C:\path with spaces\file \"quoted\" name.txt"

# 修正後: このようなコマンドは自動実行されず、確認ダイアログが表示される

実践例

安全な引数の書き方

powershell
# 問題のあるパターン(確認が求められる)
# ダブルクォートとスペースの両方を含む引数
git commit -m "fix: update \"important\" function"  # ← 確認が求められる

# より安全なパターン
# 単一引用符を使う
git commit -m 'fix: update "important" function'

# または変数を使う
$message = 'fix: update "important" function'
git commit -m $message

PowerShell 5.1での引数分割問題の理解

powershell
# PS 5.1での引数分割の問題例
# 以下のコマンドは PS 5.1 で予期しない動作をする可能性がある
& "C:\Program Files\tool.exe" "arg with ""quote"" and space"

# 安全な代替案(PS 5.1)
$arguments = @("arg with ""quote"" and space")
& "C:\Program Files\tool.exe" $arguments

# または ecapedQuotes
$escapedArg = 'arg with "quote" and space'
& "C:\Program Files\tool.exe" $escapedArg

確認ダイアログの動作

powershell
# Claude Code が確認を求める場合の動作
# 1. コマンドが表示される
# 2. 引数の問題が説明される
# 3. ユーザーが「許可」または「拒否」を選択
# 4. 「許可」の場合: コマンドが実行される
# 5. 「拒否」の場合: コマンドは実行されない

# Claude Code からより安全な代替案が提示される場合もある

注意点

  • この変更はWindows PowerShell 5.1のみに適用されます(PowerShell 7+では問題が改善されているため影響なし)
  • 日常的なコマンド(スペースもクォートも含まない引数)は引き続き自動許可されます
  • ファイルパスにスペースが含まれる場合は、問題が発生しやすくなります
  • この変更はセキュリティ強化のためであり、意図しない動作を防ぐために重要です

関連情報