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-Key: 355720

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

Printed on: April 20, 2024 at 03:04 o'clock

Mitglied: 134464
Solution 134464 Nov 22, 2017 updated at 13:37:51 (UTC)
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
Member: SlainteMhath
SlainteMhath Nov 22, 2017 at 13:24:43 (UTC)
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)
Mitglied: 134464
Solution 134464 Nov 22, 2017 updated at 13:38:21 (UTC)
Goto Top
Doch klappt hier einwandfrei, da hast du selbst einen Fehler eingebaut.

Bitte Delimiter richtig angeben!
Mitglied: 134464
134464 Nov 22, 2017 updated at 14:08:29 (UTC)
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.
Member: SlainteMhath
SlainteMhath Nov 22, 2017 at 14:14:29 (UTC)
Goto Top
Ok, nach nochmaliger Kontrolle (und Korrektur eines Typos im Variablennamen) funktioniert's tatsächlich .) Danke dir.