Zum Inhalt wechseln


Foto

Powershell Abfrage nach ergebniss filtern


  • Bitte melde dich an um zu Antworten
14 Antworten in diesem Thema

#1 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 10. Mai 2017 - 09:14

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 False
jenachdem ob die mailbox als result true oder false hat soll er dann eine ausgabe machen.

Es handelt sich um 4 Mailboxen
LG

mit where  und if habe ich schon einiges probiert nur leider komme ich nicht zum gewünschten Ergebniss.


#2 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 10. Mai 2017 - 09:33

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


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#3 testperson

testperson

    Board Veteran

  • 4.511 Beiträge

 

Geschrieben 10. Mai 2017 - 09:36

Hi,

 

und noch ein "-ExpandProperty ResultFound" hinten dran ans Select ResultFound.

 

Gruß

Jan


Good morning, that's a nice TNETENNBA!

#4 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 10. Mai 2017 - 09:52

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 lassen
Database 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.


#5 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 10. Mai 2017 - 09:55

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 von NilsK, 10. Mai 2017 - 09:56.

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#6 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 10. Mai 2017 - 10:21

das habe ich bereits versucht, also test-exchangesearch.resultfound als auch $status.ResultFound
leider nicht das gewünschte Ergebniss



#7 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 10. Mai 2017 - 10:53

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) {...


My name is Frank, you can say you to me.

#8 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 10. Mai 2017 - 10:57

#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
Def

klappt nicht wie gewünscht :/
woran könnte es noch liegen?


#9 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 10. Mai 2017 - 11:04

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


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#10 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 10. Mai 2017 - 11:07

 
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 ?
 


#11 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 10. Mai 2017 - 11:52

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


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#12 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 10. Mai 2017 - 12:34

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 von Dsemaan, 10. Mai 2017 - 12:42.


#13 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 10. Mai 2017 - 12:48

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


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#14 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 10. Mai 2017 - 13:24

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 japp
also macht er das was ich will.

Ich müsste nun das Ergebnis in eine Ausgabe packen, er soll also sagen  
Database 1 - Datenbanksuche ist Intakt
usw.
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_07

er benennt jedes mal die gleiche? hmmm


#15 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 10. Mai 2017 - 14:36

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


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!