Powershell Where-Object Bedingungen
Hallo Leute,
ich importiere eine CSV Datei in einem Powershell Skript. Die CSV Datei enthält Informationen zu Virtuellen Maschinen (PowerStatus, OS, Name der VM, VM-ID, etc.). Beim Import der CSV soll nach bestimmten Werten gefiltert werden.Ich möchte die CSV Datei nach dem PowerStatus filtern, möchte aber bestimmte Virtuelle Maschinen ausfiltern.
Die virtuellen Maschinen die ich ausfilter schreibe ich in eine Variable / Konstante.
$FilterOut = "VM1","VM2"
Danach verwende ich zum Filtern zwei Mal Where-Object. Einmal für den PowerStatus und einmal für das Ausfiltern der VM's in der Variablen. Mein Problem besteht nun darin das mein Skript nur funktioniert, wenn in der Variablen / Konstanten nur ein VM Name steht. Sobald zwei VM Namen in der Varaiblen sind, wird die Bedingungn übergangen. Kann ich meine Anforderung überhaupt über eine Variable lösen?
Where-Object -FilterScript {$_.VMName -ne $FilterOut}
ich importiere eine CSV Datei in einem Powershell Skript. Die CSV Datei enthält Informationen zu Virtuellen Maschinen (PowerStatus, OS, Name der VM, VM-ID, etc.). Beim Import der CSV soll nach bestimmten Werten gefiltert werden.Ich möchte die CSV Datei nach dem PowerStatus filtern, möchte aber bestimmte Virtuelle Maschinen ausfiltern.
Die virtuellen Maschinen die ich ausfilter schreibe ich in eine Variable / Konstante.
$FilterOut = "VM1","VM2"
Danach verwende ich zum Filtern zwei Mal Where-Object. Einmal für den PowerStatus und einmal für das Ausfiltern der VM's in der Variablen. Mein Problem besteht nun darin das mein Skript nur funktioniert, wenn in der Variablen / Konstanten nur ein VM Name steht. Sobald zwei VM Namen in der Varaiblen sind, wird die Bedingungn übergangen. Kann ich meine Anforderung überhaupt über eine Variable lösen?
Where-Object -FilterScript {$_.VMName -ne $FilterOut}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 210843
Url: https://administrator.de/contentid/210843
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
3 Kommentare
Neuester Kommentar
Hi derhoeppi,
du kannst die Maschinen die ausgefiltert werden sollen in ein Powershell Array schreiben und dann z.B. mit einer inneren Schleife die das Array durchgeht ausfiltern:
Grüße Uwe
du kannst die Maschinen die ausgefiltert werden sollen in ein Powershell Array schreiben und dann z.B. mit einer inneren Schleife die das Array durchgeht ausfiltern:
$csv = Import-Csv -Path "C:\deine.csv"
$FilterOut = @("VM1","VM2")
$filteredObject = @()
foreach ($vm in $csv){
$filterMachine = $false
foreach($n in $FilterOut){
if($vm.Name -eq $n){
$filterMachine = $true
}
}
if (!$filterMachine){
$filteredObject += $vm
}
}
$filteredObject
$filteredObject
ist dabei ein Objekt ohne die gefilterten Maschinen.Grüße Uwe
Fält mir gerade ein, geht auch einfacher:
Beachte dabei folgendes:
-notcontains ist nicht case sensitive. Wenn du möchtest das Groß- und Kleinschreibung beachtet werden sollen musst du -cnotcontains verwenden.
wenn du jetzt noch die Powerstatus-Bedingung mit in das
Uwe
$csv = Import-Csv -Path "C:\DEINECSV.csv"
$FilterOut = @("VM1","VM2")
$csv | ?{$FilterOut -notcontains $_.Name}
Beachte dabei folgendes:
-notcontains ist nicht case sensitive. Wenn du möchtest das Groß- und Kleinschreibung beachtet werden sollen musst du -cnotcontains verwenden.
wenn du jetzt noch die Powerstatus-Bedingung mit in das
Where-Object
reinpacken willst schreib die obige Zeile z.B. so$csv | ?{$FilterOut -notcontains $_.Name -and $_.PowerStatus -eq "ON"}
Uwe