ibicis 10 Geschrieben 4. April 2016 Melden Teilen Geschrieben 4. April 2016 Hallo, ich ermittle mit einem Powershell-Script UUIDs, diese lasse ich dann als Datei mit dem Hostnamen als Dateinamen ausgeben. Die Syntax der PS1-Datei ist folgendermaßen: $userprofile = $env:userprofile$hostname = $env:computername$ausgabe = "$userprofile\desktop\$hostname.txt"write "Hostname:" $hostname > $ausgabegwmi -namespace root\cimv2 -class win32_volume | FT -property DeviceID >> $ausgabe Das Ergebnis schaut analog diesem aus: Hostname:client-pc01DeviceID -------- \\?\Volume{29a819c4-b613-10d2-9e15-806e6a6d6965}\ \\?\Volume{29a819c5-b613-10d2-9e15-806e6a6d6965}\ \\?\Volume{f40e1ccb-b596-10d2-982a-806e6a6d6965}\ Nun suche ich schon tagelang und recht erfolglos nach einer Möglichkeit, die Ausgabe der DeviceID auf den rot markierten Bereich einzugrenzen (habs versucht mit SubString, Trim, Replace etc.). Alle Versuche scheiterten und provozierten Fehler, die für mich schwer bis nicht nachvollziehbar sind. Ich muss dazu sagen, dass ich bzgl. PS noch Einiges zu lernen habe, die Optionenvielfalt ist beachtlich und macht die Bedienung für mich nicht gerade leichter. Gibt es da eine Mgl., das entsprechend meiner Intention umzusetzen? Vielen Dank vorab. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 4. April 2016 Melden Teilen Geschrieben 4. April 2016 In diesem Artikel https://technet.microsoft.com/en-us/library/ee176876.aspx ziemlich am Anfang, indexof, damit kriegst Du die Stelle an der das gesuchte Zeichen steht. Dann mit Substring von bis arbeiten. Zitieren Link zu diesem Kommentar
ibicis 10 Geschrieben 4. April 2016 Autor Melden Teilen Geschrieben 4. April 2016 In diesem Artikel https://technet.microsoft.com/en-us/library/ee176876.aspx ziemlich am Anfang, indexof, damit kriegst Du die Stelle an der das gesuchte Zeichen steht. Dann mit Substring von bis arbeiten. Danke erst einmal, aber das bringt mich nicht weiter. Dieser Befehl funktioniert und liefert eine Ausgabe: $abfrage1 = $(gwmi -namespace root\cimv2 -class win32_volume | FT -property DeviceID) $abfrage1 Frage ich aber folgendes ab, bekomme ich die Ausgabe "False". $abfrage1 = $(gwmi -namespace root\cimv2 -class win32_volume | FT -property DeviceID) $abfrage2 = $abfrage1.contains("{") $abfrage2 Was mache ich falsch? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 4. April 2016 Melden Teilen Geschrieben 4. April 2016 Welche Ausgabe kommt denn bei $abfrage1 ? Evtl. bekommst du ein Array und musst das Aufteilen für jedes Element machen. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 4. April 2016 Melden Teilen Geschrieben 4. April 2016 Du bekommst ja ein Array zurück, da kannst nicht einfach Zeichen suchen. "Contains" liefert nur True oder False, also ob das Zeichen vorhanden ist oder nicht. Hier ne mögliche Lösung: $abfrage1 = $(gwmi -namespace root\cimv2 -class win32_volume) foreach ($abf2 in $abfrage1) { $abf3 = $abf2.DeviceID.Split('{').Split('}') $abf4 = $abf3.Item(1) $abf4 } Zitieren Link zu diesem Kommentar
ibicis 10 Geschrieben 4. April 2016 Autor Melden Teilen Geschrieben 4. April 2016 Du bekommst ja ein Array zurück, da kannst nicht einfach Zeichen suchen. "Contains" liefert nur True oder False, also ob das Zeichen vorhanden ist oder nicht. Hier ne mögliche Lösung: $abfrage1 = $(gwmi -namespace root\cimv2 -class win32_volume) foreach ($abf2 in $abfrage1) { $abf3 = $abf2.DeviceID.Split('{').Split('}') $abf4 = $abf3.Item(1) $abf4 } Hallo Cybquest, danke für deine Hilfe. Dass True oder False als Ausgabe kommt, war mir klar. Ich hatte aber laut Anleitung True erwartet, deshalb meine Frage, was ich falsch mache, denn "{" ist Bestandteil der Ausgabe (dachte ich jedenfalls, PS belehrte mich eines Besseren). Dein gepostetes Bsp. funktioniert leider auch nicht, ich bekomme diese Fehler: Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Na men "Split" enthält. Bei Zeile:2 Zeichen:40 + $abf3 = $abf2.DeviceID.Split('{').Split <<<< ('}') + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei Zeile:3 Zeichen:19 + $abf4 = $abf3.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep tion + FullyQualifiedErrorId : InvokeMethodOnNull Mir ist das Thema Formatierung nun auch zu hoch, ich verstehe das System hinter der Abfrage gar nicht. Es bringt mir leider nichts, ein Bsp. abzuschreiben, beim nächsten Mal habe ich dieselbe Frage wieder. Nochmals danke, aber ich muss mich mit dem zufrieden geben, was ich aktuell betreibe. Immerhin habe ich auf diese Weise eine brauchbare Ausgabe, ich muss diese nur im Nachhinein manuell filtern. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 4. April 2016 Melden Teilen Geschrieben 4. April 2016 Du benutzt vermutlich Powershell 2.0 https://social.technet.microsoft.com/Forums/windowsserver/en-US/0b052a59-535f-4498-88e1-f9506a153b25/method-invocation-failed-because-systemobject-doesnt-contain-a-method-named-split?forum=winserverpowershell Probiere mal 3.0 oder neuer (wenn möglich). Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 5. April 2016 Melden Teilen Geschrieben 5. April 2016 Frage ich aber folgendes ab, bekomme ich die Ausgabe "False". Was mache ich falsch? Ich schrub ja auch *IndexOf* und nicht Contains. Der Unterschied ist klein, aber sehr fein. Probiert hab ich es selbst nicht, das überlasse ich dir. ;) Zitieren Link zu diesem Kommentar
Beste Lösung ibicis 10 Geschrieben 5. April 2016 Autor Beste Lösung Melden Teilen Geschrieben 5. April 2016 (bearbeitet) Danke für eure Tipps, aber es geht auch einfacher. Ich hänge an obiges Script diesen Befehl an und alles wird gut: get-ChildItem $ausgabe | Foreach-Object {Get-Content $_ | Out-String | Foreach-Object {$_.Replace("\\?\Volume","").Replace("\","")} | Set-Content $_} Warum einfach, wenn es auch kompliziert geht oder so? :D bearbeitet 5. April 2016 von ibicis Zitieren Link zu diesem Kommentar
massaraksch 41 Geschrieben 6. April 2016 Melden Teilen Geschrieben 6. April 2016 (bearbeitet) Hi, gwmi -namespace root\cimv2 -class win32_volume | select @{ label="DeviceID"; exp={ "{" + $_.DeviceID.Split("{}")[1] + "}" } } Wenn die DeviceIDs ohne {} reichen, dann kann man das "{" + und + "}" natürlich weglassen. (Getestet mit Powershell 2.0) bearbeitet 6. April 2016 von massaraksch Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.