2016-10-17 1 views
0

ich eine App in Powershell ausgeführt wird, wie so:Abfrage eine Ausnahme geworfen von einem C# App in Powershell

$exe = "C:\blah\build\blah\Release\blahblah.exe" 
&$exe scheduledRun sliceBicUp useEditionId 

blahblah.exe eine C# .NET 4.5 Console App ist. Jetzt weiß ich, dass diese ausführbare Datei Fehler usw. auslösen kann. Kann ich diese Fehler/Ausnahmen innerhalb des PowerShell-Skripts selbst abfangen?

Grundsätzlich möchte ich das PowerShell-Skript feststellen, dass ein Fehler/Ausnahme aufgetreten ist und etwas, wie E-Mail unseren Helpdesk zum Beispiel.

+1

Sie laufen in verschiedenen Prozessen, so dass keine – Liam

+0

@Liam Dank Ich dachte, ich überprüfen würde. Ich muss etwas hinzufügen, um es auszuloggen und nach einer Datei usw. im PowerShell-Skript selbst zu suchen. – garfbradaz

Antwort

2

Als @Liam erwähnt, sind Fehler von externen Programmen keine Ausnahmen. Wenn die ausführbare Datei mit einem richtigen Exit-Code beendet könnten Sie die automatic variable$LastExitCode überprüfen und auf ihren Wert reagieren:

& $exe scheduledRun sliceBicUp useEditionId 
switch ($LastExitCode) { 
    0 { 'success' } 
    1 { 'error A' } 
    2 { 'error B' } 
    default { 'catchall' } 
} 

Das einzige, was Sie tun können, die output für Fehlermeldungen analysieren:

$output = &$exe scheduledRun sliceBicUp useEditionId *>&1 
if ($output -like '*some error message*') { 
    'error XY occurred' 
} 
0

Sie können diesen Code verwenden. Wenn .Net Beenden des Programms dann Fehler ps Skript übergeben wird

$exe = "C:\Users\johnn\OneDrive\Documents\visual studio 2015\Projects\test\test\bin\Release\test.exe" 

    $pinfo = New-Object System.Diagnostics.ProcessStartInfo 
    $pinfo.FileName = $exe 
    $pinfo.RedirectStandardError = $true 
    $pinfo.RedirectStandardOutput = $true 
    $pinfo.UseShellExecute = $false 
    $pinfo.Arguments = "localhost" 
    $p = New-Object System.Diagnostics.Process 
    $p.StartInfo = $pinfo 
    $p.Start() | Out-Null 
    $p.WaitForExit() 
    $stdout = $p.StandardOutput.ReadToEnd() 
    $stderr = $p.StandardError.ReadToEnd() 
    Write-Host "stdout: $stdout" 
    Write-Host "stderr: $stderr" 
    Write-Host "exit code: " + $p.ExitCode 
Verwandte Themen