Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell Where-Object Bedingungen

Frage Entwicklung Batch & Shell

Mitglied: derhoeppi

derhoeppi (Level 2) - Jetzt verbinden

08.07.2013 um 10:23 Uhr, 3056 Aufrufe, 3 Kommentare

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}




Mitglied: colinardo
08.07.2013, aktualisiert um 20:38 Uhr
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:
01.
$csv = Import-Csv  -Path "C:\deine.csv" 
02.
$FilterOut = @("VM1","VM2") 
03.
$filteredObject = @() 
04.
foreach ($vm in $csv){ 
05.
    $filterMachine = $false 
06.
    foreach($n in $FilterOut){ 
07.
        if($vm.Name -eq $n){ 
08.
            $filterMachine = $true 
09.
        }    
10.
11.
    if (!$filterMachine){ 
12.
        $filteredObject += $vm 
13.
14.
15.
$filteredObject
$filteredObject ist dabei ein Objekt ohne die gefilterten Maschinen.

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
08.07.2013, aktualisiert um 20:59 Uhr
Fält mir gerade ein, geht auch einfacher:
01.
$csv = Import-Csv -Path "C:\DEINECSV.csv" 
02.
$FilterOut = @("VM1","VM2") 
03.
$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
Bitte warten ..
Mitglied: derhoeppi
09.07.2013 um 07:41 Uhr
Hallo colinardo,

vielen Dank für deine Hilfe. Nun hat das Skript auch noch seine letzte Anforderung erfüllt.

Gruß
derhoeppi
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst PowerShell Where-Object multiple Conditions (2)

Frage von derhoeppi zum Thema Batch & Shell ...

Batch & Shell
Frage zum Einsatz von Powershell, welche Version verwenden (3)

Frage von Penny.Cilin zum Thema Batch & Shell ...

Microsoft
Drucker Über Powershell installieren (9)

Frage von Asker06 zum Thema Microsoft ...

Batch & Shell
gelöst Powershell Skript Ordnerinhalt auflisten und per E-Mail verschicken (2)

Frage von xbast1x zum Thema Batch & Shell ...

Neue Wissensbeiträge
Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(3)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (41)

Frage von Datsspeed zum Thema Exchange Server ...

Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

Off Topic
gelöst Fachzeitschriften als E-Book oder hardcoded? (11)

Frage von KowaKowalski zum Thema Off Topic ...

Windows 10
Windows Store Apps ohne Windows Store installieren (10)

Frage von keefien zum Thema Windows 10 ...