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

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

Printed on: April 28, 2024 at 16:04 o'clock

Member: Crusher79
Crusher79 Dec 01, 2022 at 11:40:08 (UTC)
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?
Member: Forseti2003
Forseti2003 Dec 01, 2022 at 12:29:54 (UTC)
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.
Mitglied: 4400667902
Solution 4400667902 Dec 01, 2022 updated at 15:07:48 (UTC)
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.
Member: Forseti2003
Forseti2003 Dec 01, 2022 at 15:11:38 (UTC)
Goto Top
Danke für den Hinweis, jetzt gehts.
Mitglied: 4400667902
4400667902 Dec 01, 2022 updated at 15:13:50 (UTC)
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.
Member: Forseti2003
Forseti2003 Dec 01, 2022 at 15:17:21 (UTC)
Goto Top
Da muss ich Dich aber jetzt leider enttäuschen - der Code wurde nicht "gecopied and gepastet" face-wink