Domanda

Ho uno script in esecuzione in C# utilizzando il codice di esecuzione asincrono PowerShell sul progetto di codice qui:

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

Devo restituire $lastexitcode e Jean-Paul descrive come utilizzare una classe pshost personalizzata per restituirlo.Non riesco a trovare alcun metodo o proprietà in pshost che restituisca il codice di uscita.

Questo motore di cui ho bisogno deve garantire che lo script venga eseguito correttamente.

Qualsiasi aiuto sarebbe apprezzato.

Saluti Bob.

È $lastexitcode e $?variabili che devo riportare.

Ciao, alla fine ha risposto.
Ho scoperto la variabile $host.Implementa un callback nell'host, in particolare un oggetto PSHost personalizzato, che consente di restituire $lastexitcode.Ecco un collegamento a una spiegazione di $host.

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

Sembra essere oscuro, scarsamente documentato, come al solito con i documenti PowerShell.Utilizzando il punto 4, la chiamata $host.SetShouldExit(1) restituisce 1 al metodo SetShouldExit di pshost, come descritto qui.

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

Dipende davvero dalla definizione della definizione del codice di uscita.I suffissi 0 e 1 immagino.

Saluti Bob.

È stato utile?

Soluzione

Ecco una funzione che puoi provare:

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
}

Spero possa aiutare

Altri suggerimenti

È possibile scrivere nel codice script che controllerà il $ lastexitcode e sarà un'eccezione se l'ExitCode non è quello che eccettuato.
Le eccezioni sono più facili da catturare.

Credo che si stanno facendo una montagna da un granello di sabbia utilizzando questo progetto di codice. esecuzione asincrona è molto facile da fare in C #.

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

Inoltre, guardando la tua domanda su quel progetto, sembra che si sta tentando di utilizzare TFS in PowerShell. Si può considerare i seguenti pezzi di informazioni aggiuntive:

  1. TFS ha cmdlet
  2. Molte altre persone hanno lavorato TFS cmdlet, cioè PSTFS
  3. È sempre possibile copiare i tfs eseguibile ovunque ne abbiate bisogno, che elude almeno una parte del vostro dolore script.

Spero che questo aiuti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top