Jump to content

String aus Ausgabe extrahieren bzw. Ausgabe kürzen


Direkt zur Lösung Gelöst von ibicis,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 > $ausgabe
gwmi -namespace root\cimv2 -class win32_volume | FT -property DeviceID >> $ausgabe

 

Das Ergebnis schaut analog diesem aus:

 

Hostname:
client-pc01

DeviceID                                                                       
--------                                                                       
\\?\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.

Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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
}

Link zu diesem Kommentar

 

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.

Link zu diesem Kommentar
  • Beste Lösung

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 von ibicis
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...