Foley60528 0 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Hey,ich würde gerne eine Powershell Abfrage nach einem bestimmten Ergebniss filtern und jenach Ergebniss soll er dann ein Echo ausgeben #Snapin hinzufügen Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010; #Testet die Exchange Suche $Status=Test-ExchangeSearch | Select ResultFound if ($status -contains "False"){ echo "Def" } if($status -contains "True"){ echo "Abc" }Er soll den Suchindex des Exchangeserver auf Funktion testen, Interessant ist hier nur das " ResultFound" dies ist entweder True oder Falsejenachdem ob die mailbox als result true oder false hat soll er dann eine ausgabe machen.Es handelt sich um 4 MailboxenLGmit where und if habe ich schon einiges probiert nur leider komme ich nicht zum gewünschten Ergebniss.
NilsK 3.046 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Moin, wenn "True" oder "False" das Ergebnis ist, dürfte "-contains" als Operator nicht gehen. Dann würde ich es mit "-eq $true" versuchen. Gruß, Nils
testperson 1.860 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Hi, und noch ein "-ExpandProperty ResultFound" hinten dran ans Select ResultFound. Gruß Jan
Foley60528 0 Geschrieben 10. Mai 2017 Autor Melden Geschrieben 10. Mai 2017 ja mit -EQ hatte ich es vorher versucht, jedoch greift das nicht richtig, er macht die Abfrage aber zeigt mir alle an, wenn ich zum Beispiel sage #Snapin hinzufügen #Snapin hinzufügen Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010; #Testet die Exchange Suche $Status=Test-ExchangeSearch | Select ResultFound -ExpandProperty ResultFound $status if ($status -eq "False"){ echo "Def" } else{ echo "Abc" } Ich brauch am ende eine Abfrage die , maximal angibt welche Database gemeint ist und ob der ResultFound Wert True oder false ist.diese echos will ich dann in meinem Monitoring ausgeben lassenDatabase 1 - true daher status ok und so weiter.in dem Beispiel ist der Status bei allen True, jedoch gibt er mir am ende das Echo Def was ja für status false steht.er hat probleme nach der info ResultFound zu filtern habe ich das Gefühl.
NilsK 3.046 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 (bearbeitet) Moin, ich vermute mal: $status.ResultFound Du solltest dir klar machen, dass du in der PowerShell mit Objekten arbeitest und nicht mit Text. Gruß, Nils bearbeitet 10. Mai 2017 von NilsK
Foley60528 0 Geschrieben 10. Mai 2017 Autor Melden Geschrieben 10. Mai 2017 das habe ich bereits versucht, also test-exchangesearch.resultfound als auch $status.ResultFoundleider nicht das gewünschte Ergebniss
Cybquest 36 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Bei Test.ExchangeSearch kommt ggf. ein Multistring zurück, daher wäre folgendes z.B. für das erste Element nötig: if ($Status[0].ResultFound -eq $true) {...
Foley60528 0 Geschrieben 10. Mai 2017 Autor Melden Geschrieben 10. Mai 2017 #Snapin hinzufügen Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010; #Testet die Exchange Suche $Status=Test-ExchangeSearch | Select ResultFound -ExpandProperty ResultFound $status if ($status[0].ResultFound -eq "False"){ echo "Def" } else{ echo "Abc" } Ausgabe :True True True True Defklappt nicht wie gewünscht :/woran könnte es noch liegen?
NilsK 3.046 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Moin, was gibt die Test-ExchangeSearch denn überhaupt zurück? Ein Objekt oder mehrere? Wenn es mehrere sind, musst du diese in einer Schleife abfragen. Gruß, Nils
Foley60528 0 Geschrieben 10. Mai 2017 Autor Melden Geschrieben 10. Mai 2017 Database Server Mailbox ResultFound SearchTime Error InSeconds -------- ------ ------- ----------- ---------- ----- Dienstaccoun RTOS2010E SystemMailbo True 3,058 ts-Mailbox x{086f6926-c 903-4cbc-8e5 Mailbox_DB_0 RTOS2010E SystemMailbo True 3,089 5 x{9be39cb5-3 d7e-480b-b23 Mailbox_DB_0 RTOS2010E SystemMailbo True 3,026 6 x{2df01cd3-8 4a6-4549-b80 Mailbox_DB_0 RTOS2010E SystemMailbo True 2,028 7 x{7b388b56-d 106-48a2-b8e er gibt insgesamt 4 stück aus.wie kann ich das dann bewerkstelligen ?
NilsK 3.046 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Moin, gut, du bekommst also vier Objekte zurück und nicht eines. Der einfachste Weg wäre wohl, mit einer ForEach-Schleife jedes Objekt anzusprechen und nach dessen Namen und ResultFound-Wert zu fragen. Gruß, Nils
Foley60528 0 Geschrieben 10. Mai 2017 Autor Melden Geschrieben 10. Mai 2017 (bearbeitet) Wie kann ich das am besten machen ?Mein Ansatz wäre: $Mailboxes=Test-ExchangeSearch #Snapin hinzufügen Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010; #Testet die Exchange Suche foreach ($Mailbox in $Mailboxes) { Where ResultFound -EQ "False" echo "abc" } er müsste mir demnach kein mal abc ausgeben, er gibt es aber 4 mal aus als ob alle auf false stehen. stehe leider ein wenig auf dem Schlauch ist ne weile her das ich was mit Powershell gemacht habe. bearbeitet 10. Mai 2017 von Dsemaan
NilsK 3.046 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Moin, das Where-Konstrukt ist mir nicht geläufig, vielleicht geht es, aber ich würde mit If arbeiten. Und niemals auf den String-Wert "true" testen, sondern auf $true. Nota bene: Objekte, nicht Text! If ($Mailbox.ResultFound -eq $true) { 'japp' } else { 'nö' } Gruß, Nils
Foley60528 0 Geschrieben 10. Mai 2017 Autor Melden Geschrieben 10. Mai 2017 So funktioniert es, wenn ich den Wert auf $False setze gibt er mir 4 mal nö aus.wenn ich ihn auf $true setze 4 mal jappalso macht er das was ich will.Ich müsste nun das Ergebnis in eine Ausgabe packen, er soll also sagen Database 1 - Datenbanksuche ist Intaktusw.Wie kann ich ihm sagen das er mir nicht nur das japp und nö ausgibt sondern auch den namen passend dazu.dann könnte ich diese Werte mit einem Echo ausgeben und Mein Monitoring nimmt die auf. $Mailboxes=Test-ExchangeSearch $database=$Mailbox.Database $status1= "Die Datenbanksuche ist intakt - 1" $status2= "Die Datenbanksuche weist einen Fehler auf - 2" $status=If ($Mailbox.ResultFound -eq $true) { "$status1" } else { "$status2" } #Snapin hinzufügen Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010; #Testet die Exchange Suche foreach ($Mailbox in $Mailboxes){ echo "$status + $database" }Die Datenbank ist in Takt - 1 + Mailbox_DB_07 Die Datenbank ist in Takt - 1 + Mailbox_DB_07 Die Datenbank ist in Takt - 1 + Mailbox_DB_07 Die Datenbank ist in Takt - 1 + Mailbox_DB_07er benennt jedes mal die gleiche? hmmm
NilsK 3.046 Geschrieben 10. Mai 2017 Melden Geschrieben 10. Mai 2017 Moin, naja, du weist $database ganz oben einen Wert zu, bevor deine Schleife losläuft. Dann ist das eben ein fester Wert. Insgesamt sieht dein Code jetzt ziemlich unordentlich aus ... Pseudocode: $Datenbanken = Test-Cmdlet Foreach $DB in $Datenbanken If $DB.Status = $true "$DB.Name ist intakt" else "$DB.Name ist kaputt" Mangels passender Umgebung kann ich das nicht testen. Aber die Logik dürfte naheliegend sein. Gruß, Nils
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden