2017-04-10 4 views
2

Ich habe eine Datei mit einer Liste von Computern, ich muss diese Liste durchlaufen und melden, wenn man frei ist.Foreach Versuch zu fangen

Jetzt funktioniert es, aber ich möchte, dass der Haken die Fehlermeldung ergreift und es in die Verwirrung des Computernamens ändert, ist frei.

Im Moment ist es noch zurückkehrt

 
quser : No User exists for * 
At line:5 char:5 
+  quser /server:$computer 
+  ~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (No User exists for *:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

Für Computer, die frei sind.

konnte ich die System.Management.Automation.RemoteException, indem Sie den Befehl quser gegen einen Computer bekommen was ich weiß ist frei und dann $Error[0] | fl * -Force läuft:

 
writeErrorStream  : True 
PSMessageDetails  : 
Exception    : System.Management.Automation.RemoteException: No User exists for * 
TargetObject   : No User exists for * 
CategoryInfo   : NotSpecified: (No User exists for *:String) [], RemoteException 
FullyQualifiedErrorId : NativeCommandError 
ErrorDetails   : 
InvocationInfo  : System.Management.Automation.InvocationInfo 
ScriptStackTrace  : at , : line 1 
PipelineIterationInfo : {0, 0} 

die mir den Ausnahmecode gab.

Jetzt schaute ich auf Foreach error handling in Powershell, die zeigte, dass mein Code richtig sein sollte, also nicht sicher, warum der Haken nicht funktioniert.

Antwort

3
try { 
    $savePreference = $ErrorActionPreference 
    $ErrorActionPreference = 'Stop' 
    quser /server:$computer 2>&1 
} 

catch [System.Management.Automation.RemoteException] { 
    Write-Host "$computer is free" 
} 

finally 
{ 
    $ErrorActionPreference = $savePreference 
} 
+0

Danke, Kumpel, arbeitete dieser Code ein Genuss. –

2

ich in der Regel tun dies:

$list = get-content "pathtofile.txt" 

foreach ($computer in $list) 
{ 
    try 
{ 
    quser /server:$computer 
} 
catch 
{ 
    if ($Error.Exception -eq "System.Management.Automation.RemoteException: No User exists for *") 
    { 
     Write-Host "$computer is free" 
    } 
    else 
    { 
     throw $error 
    } 
} 

}

Verwandte Themen