forseti2003
Goto Top

Where-Object in Array bei Powershell

Hallo,

hab ein Problem mit der Powershell und finde derzeit nicht den Fehler oder die Lösung.

Folgenden Code möchte ich ausführen:

Get-Partition | Where-Object { $_.AccessPaths -contains $disk_id.Name} | ft disknumber,accesspaths}

Wenn ich den Befehl manuell eingeben und bei $disk_id.Name den Wert "C:\Users\Vorname Nachname\" eintrage, erhalte ich den gewünschten Wert, alles gut.

Nutze ich die Variable (diese weißt den selben Wert aus) - erhalte ich keine Fehlermeldung aber einen falschen Wert, nämlich die Eintragungen ohne Accesspaths.

Bei Get-Partition ist der Wert Accesspaths ein Array und zeigt einmal den Ort der Partition im Klartext und einmal mit einer GUID an. Ich habe mit dem Wert NAME und DEVICEID schon probiert, aber immer selbes Ergebnis erhalten. Sobald ich die Variable nutze, kommt kein Wert oder der falsche, sobald ich den Wert manuell eintrage, erhalte ich die korrekte Ausgabe.

Neben -contains habe ich auch schon -in probiert - aber das macht keinen Unterschied.

Hat jemand eine Idee, was ich dabei übersehe?

Grüße Forseti

Content-ID: 4823121661

Url: https://administrator.de/forum/where-object-in-array-bei-powershell-4823121661.html

Ausgedruckt am: 27.12.2024 um 04:12 Uhr

Crusher79
Crusher79 01.12.2022 um 12:40:08 Uhr
Goto Top
Und nun müssen wir es nachbauen? Da fehlt doch was. Kannst nich mal den kompletten Code, Teilfunktion geben. Damit man es zumindest im Ergebnis nach vollziehen kann?
Forseti2003
Forseti2003 01.12.2022 um 13:29:54 Uhr
Goto Top
Soviel fehlt da eigentlich nicht, lediglich die Deklaration der Variable $disk_id:

$user = Read-Host -Prompt "Username"
$disk_id = (Get-WMIObject -Class Win32_Volume | where { ($_.Label –like "User Disk") –and ($_.Name –like "C:\Users\$user\") })

Get-Partition | Where-Object { $_.AccessPaths -contains $disk_id.Name} | ft disknumber,accesspaths}

Das Script ist ja jetzt nichts großes, soll lediglich alle Partitionen am Computer ausgeben und dabei prüfen ob ein Wert in Accesspaths übereinstimmt um diesen zu filtern.
4400667902
Lösung 4400667902 01.12.2022 aktualisiert um 16:07:48 Uhr
Goto Top
Der Code enthält falsche Bindestriche (Gedankenstriche) im Where-Object ... Des weiteren musst du die Anzahl in $disk_id auf ein Element beschränken oder wenn mehrere die per Regex Oder Match zusammenfügen und per -match vergleichen.
Forseti2003
Forseti2003 01.12.2022 um 16:11:38 Uhr
Goto Top
Danke für den Hinweis, jetzt gehts.
4400667902
4400667902 01.12.2022 aktualisiert um 16:13:50 Uhr
Goto Top
Eine Lehre für die Web Copy n Paster Fraktion Code doch besser gleich ganz selbst zu schreiben, dann entfällt das Kopfkratzen und es bleiben auch noch ein paar Haare am Ende des Tages über face-wink.
Forseti2003
Forseti2003 01.12.2022 um 16:17:21 Uhr
Goto Top
Da muss ich Dich aber jetzt leider enttäuschen - der Code wurde nicht "gecopied and gepastet" face-wink