2016-05-24 4 views

Antwort

0

Sie diese durch Filterung tun können:

if (($arr | Where-Object { $_ -like 'server3*' })) { 
    # do stuff 
} 

if ($arr.Where({ $_ -like 'server3*' })) { 
    # do stuff 
} 

Sie auch die Vorteile der Tatsache, dass -like und -match Betreiber eine auf Sammlungen arbeiten kann, und zurück nehmen Sammlung, die die Bedingung erfüllt, und dann weiter auf die Tatsache, dass eine leere Sammlung $false:

bewerten wird

Nachdem ich Ihre Frage erneut gelesen habe, sehe ich, dass dies nicht ganz das ist, wonach Sie suchen.

In Ihrem Beispiel der Wert in $arr ist eine Teilmenge von $ser, so könnte man dies tun:

if ($arr.Where({ $ser -match $_ })) { } 

Aber es ist nicht klar, ob das wird immer der Fall sein.

Vielleicht etwas sicherer, aber auch ausführlicher wäre sowohl gegeneinander zu überprüfen:

if (
    $arr | Where-Object { 
     $_ -like "*$ser*" -or 
     $ser -like "*$_*" 
    }) { 
    # do stuff 
} 

Um zu wissen, was tatsächlich abgestimmt wurde, habe ich einen etwas anderen Ansatz würde vorschlagen:

$arr | ForEach-Object { 
    if ($_ -like $ser) { 
     # do stuff 
     # $_ will refer to the array member that was matched 
    } 
} 

Der Vorbehalt hier ist, dass # do stuff einmal für jedes Spiel ausgeführt wird, anstatt einmal , wenn eine Übereinstimmung gefunden wurde.

Eine andere Möglichkeit:

$itemsMatched = $arr -like $ser 
if ($itemsMatched) { 
    # do stuff (executed once) 
} 

In diesem Fall werden die $itemsMatched Anordnungselemente enthalten, die angepaßt (es können mehr als eins sein).

+0

Dies scheint zu funktionieren: if ($ arr | Where-Object {$ _ -ähnlichen $ ser) {tun Sachen} Followup Frage wenn ich darf? Wie würde ich zu Protokollierungszwecken sehen, auf was es abgestimmt ist? –

+0

@ThomasGuidry siehe meine Bearbeitung. – briantist

+0

Dies funktioniert: $ arr = "server1", "server2", server3 " $ ser =" server3-test " if ($ arr.Wo ({$ ser -match $ _})) { "gefunden" } Dies gilt nicht $ arr = "server1", "server2", server3" $ ser = "server3-Test" $ arr | ForEach-Object { if ($ _ -ähnlichen $ ser) { „gefunden“ } } Im Idealfall würde ich mag die zweite verwenden, weil es hoffentlich mir alle Spiele bekommen würde und ich es nutzen könnte, um "Do stuff" einmal auch. –

Verwandte Themen