Powershell - Substring(), split()
Hallo,
ich habe ein Problem in der Powershell, bei dem ich Hilfe benötige. Bisher konnte mir Google und Konsorten nicht helfen.
Was meine Fähigkeiten in Powershell anbelangt, so stufe ich mich als Anfänger ein.
Hier mein Problem:
ich hab in einer Variable die Werte:
worstationId=B11A
worstationName=ANTON_AUTO_TEST_B11A
Nun möchte ich die Werte hinter dem "=" extrahieren/weiterverwenden
Ich habe es mit split() und mit substring() probiert, aber ohne Erfolg.
Kann mir jemand weiterhelfen?
mfg
Dirk
ich habe ein Problem in der Powershell, bei dem ich Hilfe benötige. Bisher konnte mir Google und Konsorten nicht helfen.
Was meine Fähigkeiten in Powershell anbelangt, so stufe ich mich als Anfänger ein.
Hier mein Problem:
ich hab in einer Variable die Werte:
worstationId=B11A
worstationName=ANTON_AUTO_TEST_B11A
Nun möchte ich die Werte hinter dem "=" extrahieren/weiterverwenden
Ich habe es mit split() und mit substring() probiert, aber ohne Erfolg.
Kann mir jemand weiterhelfen?
mfg
Dirk
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 623863
Url: https://administrator.de/contentid/623863
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
19 Kommentare
Neuester Kommentar
PS ist kein Batch!
Also richtig so
Jetzt kannst Du z.B. $worstationName splitten nach "_"
E.
Also richtig so
$worstationId = "B11A"
$worstationName = "ANTON_AUTO_TEST_B11A"
$x = $worstationName.Split("_")
$x
E.
Oder wenn die Daten aus einer Textdatei kommen und du Zeilenweise mehrere Werte verarbeiten willst dann
Mittels der Properties "$_.Key" und "$_.Value" innerhalb der For-each Schleife greifst du dann auf die Werte der jeweilige Zeile zu und kannst sie so weiterverarbeiten.
Alternativ bietet die Powershell für solch formatierte Dateien bereits einpassendes CMDLet an welches das ganze automatisch macht
Und schon sind die Daten schön in ne HashTable eingelesen .
Oder wenn du bei diesem Konstrukt nur die reinen "Values" haben willst auch kein Thema
Gruß P.
$lines = Import-CSV 'D:\datei.txt' -delimiter "=" -header "Key","Value"
$lines | %{
"Key: " + $_.Key
"Value: " + $_.Value
}
Alternativ bietet die Powershell für solch formatierte Dateien bereits einpassendes CMDLet an welches das ganze automatisch macht
Und schon sind die Daten schön in ne HashTable eingelesen .
$data = gc 'D:\datei.txt' -raw | ConvertFrom-StringData
# Zugreifen auf die Values dann mittels des Keys so:
$data.worstationId
$data = gc 'D:\datei.txt' -raw | ConvertFrom-StringData
$data.Values
Gruß P.
Zitat von @perseus21:
Hallo,
ich habe ein Problem in der Powershell, bei dem ich Hilfe benötige. Bisher konnte mir Google und Konsorten nicht helfen.
Was meine Fähigkeiten in Powershell anbelangt, so stufe ich mich als Anfänger ein.
Hier mein Problem:
ich hab in einer Variable die Werte:
worstationId=B11A
worstationName=ANTON_AUTO_TEST_B11A
Nun möchte ich die Werte hinter dem "=" extrahieren/weiterverwenden
Ich habe es mit split() und mit substring() probiert, aber ohne Erfolg.
Kann mir jemand weiterhelfen?
mfg
Dirk
Hallo,
ich habe ein Problem in der Powershell, bei dem ich Hilfe benötige. Bisher konnte mir Google und Konsorten nicht helfen.
Was meine Fähigkeiten in Powershell anbelangt, so stufe ich mich als Anfänger ein.
Hier mein Problem:
ich hab in einer Variable die Werte:
worstationId=B11A
worstationName=ANTON_AUTO_TEST_B11A
Nun möchte ich die Werte hinter dem "=" extrahieren/weiterverwenden
Ich habe es mit split() und mit substring() probiert, aber ohne Erfolg.
Kann mir jemand weiterhelfen?
mfg
Dirk
Wenn die Variable in Powershell so lauten würde:
$a = "worstationId=B11A"
$b = "worstationName=ANTON_AUTO_TEST_B11A"
Dann kannst du die Werte hinter dem "=" so extrahieren:
$a = "worstationId=B11A"
$b = "worstationName=ANTON_AUTO_TEST_B11A"
$a1 = $a.Split('=')[1]
$b1 = $b.Split('=')[1]
Ist es das was du brauchst?
EDIT:
UUUUUPS! Da war einer schneller! Aber lustig, dass wir den gleichen Ansatz verfolgt haben :D
Zitat von @perseus21:
Jetzt muss ich nur noch verstehen, was in den zwei Zeilen genau geschieht.
was macht der Schalter -raw und das ConvertFrom-StringData?
Der Schalter -raw sagt das die Textdatei beim Einlesen als ganzes und nicht als Array eingelesen werden soll. Bei Verwendung von ConvertFrom-StringData ist das angeraten da man sonst ein Array aus Hashtables bekommen würde und das wäre doppelt gemoppelt und wäre verwirrend.Jetzt muss ich nur noch verstehen, was in den zwei Zeilen genau geschieht.
was macht der Schalter -raw und das ConvertFrom-StringData?
ConvertFrom-StringData macht aus einer oder mehreren Zeilen die so aufgebaut sind wie deine also
Key = Value
eine sogenannte "Hashtable" mit dem ersten Wert vor dem Gleichheitszeichen als Key und dem dahinter als zugehörigem Value.
Was eine Hashtable ist kannst du hier nachschlagen
https://www.windowspro.de/script/hash-table-powershell-erzeugen-elemente ...
$x = (get-content '$var' -raw | ConvertFrom-StringData)
$x.values
Eine Anwendung ist übrigens falsch wenn $var schon den Text enthält brauchst du natürlich die Textdatei nicht mehr einlesen, außerdem werden Variablen innerhalb von Hochkommata nicht aufgelöst!$x.values
$x = $var | ConvertFrom-StringData)
$x.values
Da hast du dir das komplizierteste Beispiel ausgesucht. Und eigentlich ließt du so eher Content aus Files ein als bestehende Variablen.
Aber jeder wie er es am liebsten hat. Die Geschmäcker sind ja verschieden
> Clear
> Set-ExecutionPolicy Unrestricted -force
> $PcName = $env:COMPUTERNAME
> $Data = ".\Scripte\computer.prefs"
> $x = (get-content $Data -raw | ConvertFrom-StringData)
> $x.Values
>
Der Code in Zeile 2 funktioniert aber nur, weil du schon die Policy in deiner Session aktualisiert hast.
Powershell kann sich nicht selbst vom Script aus unrestricten, weil PS normaler schon "vor" dessen Ausführung verhindert wird.
Willst du ein PS-Script ausführen und temporär die ExecutionPolicy aussetzen machst du das so:
von der Console aus:
Poeershell.exe -Executionpolicy bypass -file "deine ps1-Datei"
Wie von mir und einigen anderen schon beschrieben. Das wäre meiner Ansicht nach der eigentliche Weg, weil leicht verständlich und, was nicht zu verachten ist, stabil und schnell.
Aber wie mein Lehrer immer sagte: "Nicht wie man etwas umsetzt, sondern, dass man es umsetzt ist wichtig."
Ich bin immer bereit was Neues zu lernen oder anders gesagt, wie es richtig gemacht wird...
Du kannst ja mal hier rein schauen:
https://docs.microsoft.com/en-us/powershell/scripting/learn/more-powersh ...
Hier eine Sammlung aller PS keywords:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Grüße!