1

次のように、powershell を使用して perl スクリプトを呼び出そうとしています。

$plScript = Join-path $pwd 'Tools\myScript.pl'
$plOut = New-Item out.txt -type file -force
$plArgs = @($plScript, '--files','*.c', 'AddInc=\Tools','Addlib=\Tools')
Start-Process perl.exe -ArgumentList $plArgs -RedirectStandardOutput $plOut - wait

これは次のメッセージで失敗します。

Start-Process : Process with an Id of 80096 is not running.
+     Start-Process <<<<  perl.exe -ArgumentList  $plArgs  -RedirectStandardOutput $plOut -wait
+ CategoryInfo          : NotSpecified: (:) [Start-Process], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.StartProcessCommand

Trace-Command を使用すると、どこで失敗するかがわかりますが、何が問題なのかわかりません

DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : System.ArgumentException: Process with an Id of 150588 is not running.
at System.Diagnostics.Process.GetProcessById(Int32 processId, String machineName)
at Microsoft.PowerShell.Commands.StartProcessCommand.start(ProcessStartInfo startInfo)
at Microsoft.PowerShell.Commands.StartProcessCommand.BeginProcessing()
at System.Management.Automation.Cmdlet.DoBeginProcessing()
at System.Management.Automation.CommandProcessorBase.DoBegin()

何が欠けていますか?

これをpowershell v3で実行すると、エラーなしで成功します...しかし、この割り当てのためにv2をサポートする必要があります...

4

1 に答える 1

2

コマンドがプロセスの ID を取得する前に、perl プロセスが終了しているようです。この方法を試して、これを乗り越えられるかどうかを確認してください - おそらく perl が早く終了する理由を理解してください:

$p = Start-Process perl.exe -ArgumentList $plArgs -RedirectStandardOutput $plOut -PassThru
if (!$p.HasExited) {
    $p.WaitForExit()
} 
else {
    "Hmm why did the process exit so early, exit code was: $($p.ExitCode)"   
}
于 2013-10-27T20:20:41.953 に答える