Windows Server 2012 R2で奇妙な問題が発生しましたが、まったく意味がありません。
基本的に次の構造を持つPowerShellスクリプトがあります。
Function Something-Different
{
[...]
}
Function Start-Some-Batch
{
Start-Process "K:\Path\To\Batch.cmd"
}
Function Something-Else
{
[...]
}
Something-Different
Start-Some-Batch
Something-Else
ただし、バッチファイルK:\Path\To\Batch.cmd
決して実行されません!
いくつかの詳細と事実:
Start-Process "K:\Path\To\Batch.cmd"
PowerShellコンソールから直接出力しても何も出力されず、バッチスクリプトも実行されません。$error[0]
は実行後に空になりますSomething-Else
は問題なく実行されています(つまり、Start-Some-Batch
はPSスクリプトの実行の終了を妨げていません)Security Settings
グループポリシー経由何がそのような奇妙な行動を引き起こす可能性がありますか?ここではアイデアが不足しています。
これが、Powershell v4を使用した場合の動作です。
PS C:\Scripts> Start-Process cmd -ArgumentList "/c 1.cmd" -WorkingDirectory c:\test4
どこ 1.cmd
住む c:\test4
この問題について私が見つけた最良の回避策は、ChocolateyのStart-ChocolateyProcessAsAdmin
メソッドの例にあります。
$somePath = "C:\Path with Spaces" # Like $env:ProgramFiles
$batFile= "$someVar\myfile.bat"
Start-Process -ArgumentList "/c `'$batFile`'" -FilePath 'cmd.exe'
-ArgumentList
内の単一引用符または二重引用符にすることができます。他の引用符の内側にある場合はエスケープする必要があります。
これは、PowerShellがStart-Process行を評価する最初の「パス」が$ batFileを正しい値に解決し、次に/c 'C:\Path with Spaces\myfile.bat'
をcmd.exe
に渡すために機能します。