2

Ich lerne posh. Und ich versuche zu verstehen, warum dieses Skript die Warnung nicht erfasst. HierPowershell Try/catch - get-user

try{ 
    get-user aaaa -WarningAction Stop 
} 
catch 
{ 
    Write-Host "hi" 
} 

ist der Fehler:

get-user : The operation couldn't be performed because object 'aaaa' couldn't be found on 
'iDC01.contoso.com'. At C:\Users\Gra***\Desktop\test.ps1:2 char:5 
+  get-user aaaa -WarningAction Stop 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Get-User], ManagementObjectNotFoundException 
    + FullyQualifiedErrorId : [Server=ME1,RequestId=ebcde0d2-9222-443b-b25a-ef7279fd168e, 
     TimeStamp=20.06.2017 13:51:35] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] 
     FE0D594D,Microsoft.Exchange.Management.RecipientTasks.GetUser 

I -WarningActions Stop und -ErrorAction Stop aber keine Ergebnisse tryied haben.

Im Allgemeinen habe ich die Grundlagen von try/catch verstanden und das folgende Skript funktioniert ok.

try{ 
Get-Process -name xyz -ErrorAction Stop 
} 
catch{ 
Write-Host "oops" 
} 

Ich benutze powershell_ise 5.1. Weißt du, was mit der get-user falsch ist? Auch kann ich Get-ADuser nicht verwenden.

+0

'get-user' ist keine native Powershell-Befehl. Wie sieht der Code für diese Funktion aus? – gms0ulman

+0

"Get-User" ist als Exchange-Cmdlet dokumentiert und gibt nur Objekte aus Exchange zurück. –

+0

Sie legen die WarnungAction, aber nicht die ErrorAction. Ihre ErrorActionPreference war wahrscheinlich Continue, wenn Sie dies ausgeführt haben? –

Antwort

1

Es gibt zwei Dinge, die beim Aufruf einer Funktion, Fehler oder Warnung, abgefangen werden können. Sie können diese global mit $WarningPreference oder $ErrorActionPreference im Skript oder einzeln mit den -ea- oder -wa-Argumenten festlegen. In Ihrem Beispiel würde ich folgendes sicher sein verwenden:

Try { 
    Get-User aaaa -wa Stop -ea Stop 
} Catch { 
    Write-Output "hi" 
    Write "[$($_.Exception.GetType().FullName)] - $($_.Exception.Message)" 
} 

about_Preference_Variables

+0

Danke @ TheIncorrigible1 und Paal Braathen. Aber ich habe versucht -ErrorAction Stop und es hat nicht geholfen. Und ich habe herausgefunden, dass dies passiert, weil ich Remote-Powershell über New-PSSession verwende. Es funktioniert auf dem Server. – apatic

Verwandte Themen