Abfangen von Fehlern in Workflows
Ich habe das Spiel mit PowerShell Workflows in PS 3.0 RC, und so weit, ich bin in der Liebe. Es gibt jedoch viele Einschränkungen auf die Arten von Dinge, die Sie können und können nicht innerhalb von workflows. Die, die ich aufgehängt derzeit ist die $Error-variable. Beim aufrufen von meinem workflow, erhalte ich die folgende Fehlermeldung:
The variable 'Error' cannot be used in a script workflow.
Weiß jemand, wie fangen Sie den text eines Fehlers innerhalb eines Workflows oder Vorschläge über alternative Methoden der Fehler-fangen, wenn Sie nicht vertraut sind mit workflows? Ich habe lange gesucht um, und finde fast keine Informationen über die Besonderheiten des workflows. Danke!
Ich versuche, so etwas zu tun:
workflow Get-LoggedOnUser{
param([array]$computers,[System.Management.Automation.PSCredential]$credential)
foreach -parallel($computer in $computers) {
$response = $null
$errorMessage = $null
If (Test-Connection -ComputerName $computer -count 1 -quiet) {
Try {
$ErrorActionPreference = "Stop"
$response = Get-WMIObject -PSCredential $credential -PSComputername $computer -query "Select UserName from Win32_ComputerSystem"
$Error
}
Catch {
$errorMessage = $Error[0].exception
}
Finally {
$errorActionPreference = "Continue"
}
}
Else {
$errorMessage = "No response"
}
$output = [PSCustomObject]@{
Name = $computer
User = $response.UserName
Error = $errorMessage
}
$output
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Landete ich, dies zu lösen, indem man die meisten der Logik meines Workflow in einem InlineScript block. Auf diese Weise wird jede Schleife der Workflow läuft immer noch parallel (was ich wollte), aber ich bin frei zu verwenden normalen PowerShell-cmdlets, Parameter und Variablen (einschließlich $Fehler) innerhalb des Workflows:
}
Können Sie versuchen, es zu tun wie in der V2 ( nicht getestet in V3, aber ich denke, es funktioniert )
den
Get-Member
von$_
im catch-Rückkehr:Innerhalb einer Powershell-Workflow können Sie nicht mit der $Fehler variable. Sie haben die folgende Methode verwenden, zumindest in meiner Erfahrung: