5

コード プロジェクトの powershell 非同期実行コードを使用して、C# でスクリプトを実行しています。

http://www.codeproject.com/KB/threads/AsyncPowerShell.aspx?display=PrintAll&fid=407636&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2130851#xx2130851xx

$lastexitcode を返す必要があります。Jean-Paul は、カスタム pshost クラスを使用してそれを返す方法を説明しています。終了コードを返す pshost のメソッドまたはプロパティが見つかりません。

私が持っているこのエンジンは、スクリプトが正しく実行されるようにする必要があります。

どんな助けでも大歓迎です。

ボブをよろしく。

その $lastexitcode と $? 戻す必要がある変数。

こんにちは、やっと答えました。
$host 変数について知りました。ホスト、具体的にはカスタム PSHost オブジェクトにコールバックを実装し、$lastexitcode を返すことができるようにします。$host の説明へのリンクを次に示します。

http://mshforfun.blogspot.com/2006/08/do-you-know-there-is-host-variable.html

PowerShellドキュメントではいつものように、あいまいで、文書化が不十分なようです。ここで説明するように、ポイント 4 を使用して、$host.SetShouldExit(1) を呼び出すと、pshost の SetShouldExit メソッドに 1 が返されます。

http://msdn.microsoft.com/en-us/library/system.management.automation.host.pshost.setshouldexit(VS.85).aspx

それは本当にあなた自身の終了コード定義を定義することに依存します。0 と 1 のサフィックスだと思います。

ボブをよろしく。

4

3 に答える 3

4

試すことができる機能は次のとおりです。

function run-process ($cmd, $params) {
$p = new-object System.Diagnostics.Process
$p.StartInfo = new-object System.Diagnostics.ProcessStartInfo
$exitcode = $false  
$p.StartInfo.FileName = $cmd
$p.StartInfo.Arguments = $params
$p.StartInfo.UseShellExecute = $shell
$p.StartInfo.WindowStyle = 1; #hidden.  Comment out this line to show output in separate console
$null = $p.Start()
$p.WaitForExit()
$exitcode = $p.ExitCode
$p.Dispose()    
return $exitcode
}

それが役立つことを願っています

于 2009-04-23T02:08:17.187 に答える
1

$ lastexitcodeをチェックし、exitcodeが除外したものでない場合は例外をスローするスクリプトコードを記述できます。
例外は簡単にキャッチできます。

于 2009-04-19T21:22:43.637 に答える
1

このコード プロジェクトを使用して、モグラ塚から山を作っていると思います。C# での非同期実行は非常に簡単です。

PowerShell psCmd = PowerShell.Create().AddScript({Invoke-YourScriptAndReturnLastExitCode});
IAsyncResult result = psCmd.BeginInvoke();
// wait for finish
psCmd.EndInvoke(result);

また、そのプロジェクトに関する質問を見ると、PowerShell で TFS を使用しようとしているようです。次の追加情報を考慮することができます。

  1. TFS にはコマンドレットがあります
  2. 他の多くの人が TFS コマンドレット、つまりPSTFSを使用しています。
  3. tfs 実行可能ファイルは、必要な場所にいつでもコピーできます。これにより、スクリプトの苦痛の少なくとも一部を回避できます。

お役に立てれば

于 2010-03-22T00:53:49.667 に答える