slaintemhath
Goto Top

Arrays vergleichen mit Powershell

Moin,

ich sitze hier vor einen Problem mit Powershell, das mich schier wahnsinnig macht.

Hintergrund: Die auf einem Windows 2012r2 Server laufenden Dienste sollen gegen eine Liste von Default-Diensten geprüft werden. Die nicht im Default enthaltenen Dienste sollen ausgegeben werden
$StdSvc = Import-Csv .\std_win2012r2.csv 
$CurrenSvc = Get-Service -ComputerName "MyServer" | select name  

Die CSV sieht dabei so aus
"AeLookupSvc"  
"ALG"  
"AppIDSvc"  
"Appinfo"  
"AppMgmt"  
"AppReadiness"  
"AppXSvc"  
"AudioEndpointBuilder"  
"Audiosrv"  
"BFE"  
"BITS"  
...
Insgesamt 142 Zeilen

Problem: Egal wie ich es anstelle, ich bekomme nich die "Differenz" der beiden Arrays ...

Versucht habe ich:
$CurrenSvc | where ($StdSvc -notcontains $_ )
oder
compare-object $StdSvc $CurrentSvc
und zum Schluss noch das manuelle durchlaufen der beiden Arrays mit 2 foreach Loop...

Wo liegt mein (denk-)Fehler?

Google, Technet und StackOverflow hab ich schon durch :/

lg,
Slainte

Content-ID: 355720

Url: https://administrator.de/contentid/355720

Ausgedruckt am: 21.11.2024 um 13:11 Uhr

134464
Lösung 134464 22.11.2017 aktualisiert um 14:37:51 Uhr
Goto Top
Du hast Objekte mit unterschiedlichen Typs verglichen und die Eigenschaften nicht expandiert face-wink
$StdSvc = Import-Csv .\std_win2012r2.csv -delimiter ";" | Select -Expand Spaltenname  
$CurrenSvc = Get-Service -ComputerName "MyServer" | select -Expand  name  
compare $stdSvc $currentSvc -Passthru | ?{$_.SideIndicator -eq '=>'}  
Spaltenname der CSV bitte anpassen
SlainteMhath
SlainteMhath 22.11.2017 um 14:24:43 Uhr
Goto Top
Klappt leider nicht so wie ich mir das vorstelle :/

Als Ergebnis bekomme ich ALLE Elemente von $StdSvc ab der ersten Abweichung
Also:

StdSvc
@(a, b, c, d)

CurrentSvc
@(a, b, x, c, d)

Ergebnis von compare
@(x, c, d)

Was ich will:
@(x)
134464
Lösung 134464 22.11.2017 aktualisiert um 14:38:21 Uhr
Goto Top
Doch klappt hier einwandfrei, da hast du selbst einen Fehler eingebaut.

Bitte Delimiter richtig angeben!
134464
134464 22.11.2017 aktualisiert um 15:08:29 Uhr
Goto Top
Hier auch der Beweis:
$default = @('a','b','c','d')  
$current = @('a','c','x')  
compare $default $current -PassThru | ?{$_.Sideindicator -eq '=>'}  
Ergibt nur x, so wie es zu erwarten war!

So wie es aussieht hast du die CSV nicht richtig importiert und den Delimiter nicht richtig angegeben.
SlainteMhath
SlainteMhath 22.11.2017 um 15:14:29 Uhr
Goto Top
Ok, nach nochmaliger Kontrolle (und Korrektur eines Typos im Variablennamen) funktioniert's tatsächlich .) Danke dir.