2016-04-27 6 views
0

Ich versuche eine leere Zeile in der Ausgabe zu erstellen, wenn ein Fehler gefunden wird. Ist das möglich?Powershell - Versucht, eine Leerzeile zu erhalten, wenn ein Fehler vorliegt

Hier ist mein Code:

$list = ForEach ($mailbox in $mailboxes) { 
    Get-Mailbox $mailbox | select primarysmtpaddress 
    If (ErrorAction == $True) { Write-Output `n} 
} 

$mailboxes zu einem Get-Content-Befehl zugeordnet ist, die perfekt funktioniert. Die ausgewählte primarysmtpadadresse funktioniert ebenfalls ordnungsgemäß. Die If-Anweisung und der darin enthaltene Code sind nicht gültig.

EDIT: Korrigiert ‚n mit den richtigen Escape-Zeichen von` n

+0

Hey jisaak! Ich habe versucht, die vier Leerzeichen vor dem Code zu machen. Wie hast du es richtig angezeigt bekommen? –

+0

Markieren Sie einfach den Code und formatieren Sie ihn mit den '{}' innerhalb des Editors ;-) –

+0

@ArthurMarquis Die standardmäßige Möglichkeit, eine Frage auf StackOverflow als beantwortet zu markieren, besteht darin, eine der Antworten zu akzeptieren, indem Sie auf das Häkchen klicken Wahltasten. Es besteht keine Notwendigkeit, es in den Titel zu schreiben. –

Antwort

0

Ich würde empfehlen, dass Sie ein try und catch, verwenden und schreibe in dem Fang die leere Zeile.

Sie verwenden auch ein falsches Escape-Zeichen: http://ss64.com/ps/syntax-esc.html

ForEach ($mailbox in $mailboxes) 
{ 
    try 
    { 
     Get-Mailbox $mailbox | select primarysmtpaddress 
    } 
    catch 
    { 
     Write-Host `n 
    } 
} 
+0

Ich werde es jetzt versuchen! –

+0

Scheint nicht zu funktionieren, hat immer noch die Liste wie normal Hier ist der genaue Code, den ich benutzt habe. '$ list = foreach ($ Postfach in $ Mailboxen) {versuchen {Get-Mailbox $ Postfach | select primarySMTPaddress} catch {Write-Host 'n}} Entschuldigung, ich bekomme immer noch nicht die richtige Codeformatierung. Ich werde daran arbeiten. –

0

Da Sie auf eine Variable sind sparen Sie nicht Write-Host verwenden können, aber man konnte einen leeren String zurück. Select primarysmptpaddress gibt eine pscustomobject mit einer -Eigenschaft zurück. Da wir bei einem Fehler eine leere Zeichenfolge zurückgeben, würde ich -ExpandProperty primar... verwenden, um nur den Zeichenfolgenwert innerhalb zu erhalten, so dass wir den gleichen Objekttyp bei Erfolg und Fehler haben.

$list = ForEach ($mailbox in $mailboxes) { 
    #Try/Catch to catch errors 
    try { 
     #Added -ErrorAction Stop to make sure it goes to catch on error. Might not be necessary (depends on the cmdlet). 
     #Used ExpandProperty to only get the value of primarysmptaddress as a string (since no mail = empty string in catch-block) 
     Get-Mailbox $mailbox -ErrorAction Stop | Select-Object -ExpandProperty primarysmtpaddress 
    } catch { 
     #Blank value. Can't use Write-Host/Out-Host since you're saving to a variable 
     "" 
    } 
} 
+1

Frode F. das hat perfekt funktioniert. Ich habe es nicht ohne den -ErrorAction Stop versucht, so dass ich nicht feststellen konnte, ob es notwendig war oder nicht. Vielen Dank, dass Sie sich die Zeit genommen haben, ein Powershell-Noobie auszuhelfen! Ich werde den Beitrag bearbeiten, um ihn als beantwortet zu markieren. Danke noch einmal! –

+1

Kein Problem. Sie müssen den Titel nicht bearbeiten. Sie markieren die richtige Antwort mit dem Häkchen auf der linken Seite der Antwort. Das schließt die Frage. Willkommen bei StackOverflow und viel Glück. :-) –

Verwandte Themen