an34mem
Goto Top

PowerShell - Hochkomma und Anführungszeichen deklarieren

Hallo.

Ich habe ein kleines Anfängerproblem mit den Anführungszeichen, um mit den deklarierten Variablen weiterarbeiten zu können.

Bei dem folgenden 1. Beispiel wurde bewusst mit Hochkomma und Anführungszeichen gearbeitet, um das Problem
etwas besser zu veranschaulichen.

1. Beispiel:
$p1 = '$Das'  
$p2 = "_ist"   
$p3 = '$_ein_Test'  
$p4 = "_OK"   
$data = @("_A","_B","_C","_D")  
$Ergebnis = "$p1$($p2) = $p3$($p4)" + $data[1]  
Ausgabe:
$Das_ist = $_ein_Test_OK_B

2. Beispiel:
Verwendet man bei $p1 + $p3 ein Anführungszeichen:
$p1 = "$Das"  
$p2 = "_ist"   
$p3 = "$_ein_Test"  
$p4 = "_OK"   
$data = @("_A","_B","_C","_D")  
$Ergebnis = "$p1$($p2) = $p3$($p4)" + $data[1]  
Ausgabe:
 _ist = _OK_B

wird $p1 und $p3 ignoriert.

Leider haben meine unzählige Versuche nicht dazu geführt, dieses Problem im Griff zu bekommen
Wie muss man das 2. Beispiel deklarieren, dass ich Ausgabe wie bei Beispiel 1 ist, um mit $p1 und $p3 als Variable arbeiten zu können?
Vielen Dank für eine Hilfestellung.
Gruß

Content-ID: 1732671281

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

Ausgedruckt am: 19.11.2024 um 05:11 Uhr

149569
149569 17.01.2022 aktualisiert um 16:51:19 Uhr
Goto Top
Wenn wenn du nicht willst das Variablen innerhalb von Anführungszeichen expandiert werden escape das Dollarzeichen mit dem Backtick (`)
$p1 = "`$Das"  
$p3 = "`$_ein_Test"  
oder kombiniere mittels +
$p1 = '$' + 'Das'  
$p3 = '$' + '_ein_Test'  

Damit du es für die Zukunft verstehst, lies: about_Quoting_Rules

$p1 = "`$Das"  
$p2 = "_ist"   
$p3 = "`$_ein_Test"  
$p4 = "_OK"   
$data = @("_A","_B","_C","_D")  
$Ergebnis = "$p1$p2 = $p3$p4$($data[1])"  
$ergebnis
==
$Das_ist = $_ein_Test_OK_B
AN34Mem
AN34Mem 17.01.2022 um 16:52:55 Uhr
Goto Top
Hallo hacktor.
Damit habe ich es auch versucht, und die Ausgabe erscheint wie bei dem 1. Beispiel.
Das Problem ist jedoch, dass mir die gewünschte Variable nach der Maskierung aber nicht zur Verfügung steht....
149569
149569 17.01.2022 aktualisiert um 17:03:40 Uhr
Goto Top
Dann musst du das auch schreiben, konnte ich so leider nicht eindeutig interpretieren was das Ergebnis sein sollte.
Willst du den Namen einer neue Variablen erstellen nutze einfach New-Variable oder Set-Variable und bau den Wert im Value zusammen.

$p1 = "Das"  
$p2 = "_ist"   
$p3 = "_ein_Test"  
$p4 = "_OK"   
$data = @("_A","_B","_C","_D")  
Set-Variable -Name "$p1$p2" -Value "$p3$p4$($data[1])"  
$Das_ist
AN34Mem
AN34Mem 17.01.2022 um 16:59:49 Uhr
Goto Top
... um mit den deklarierten Variablen weiterarbeiten zu können...
Sorry, wenn es nicht eindeutig war.
149569
149569 17.01.2022 aktualisiert um 17:00:48 Uhr
Goto Top
s. Beispiel im lezten Kommentar.
AN34Mem
AN34Mem 17.01.2022 um 17:27:03 Uhr
Goto Top
Leider hilft der Lösungsvorschlag nicht weiter.

statt: $p1 = "$Das" wurde $p1 = "Das" verwendet.
und für $p3 = "$_ein_Test" -> $p3 = "_ein_Test"

Läßt man das $ Zeichen weg, erfolgt wie am Anfang:
Ausgabe: Das_ist = _ein_Test_OK_B
Benötigt wird aber:
Ausgabe: $Das_ist = $_ein_Test_OK_B
und nicht:
Ausgabe: _ist = _OK_B
149569
149569 17.01.2022 aktualisiert um 17:35:57 Uhr
Goto Top
Zitat von @AN34Mem:

Leider hilft der Lösungsvorschlag nicht weiter.

statt: $p1 = "$Das" wurde $p1 = "Das" verwendet.
und für $p3 = "$_ein_Test" -> $p3 = "_ein_Test"

Läßt man das $ Zeichen weg, erfolgt wie am Anfang:
Ausgabe: Das_ist = _ein_Test_OK_B
Benötigt wird aber:
Ausgabe: $Das_ist = $_ein_Test_OK_B
und nicht:
Ausgabe: _ist = _OK_B
Du hast dabei einen Denkfehler wie man in der Powershell Variablen verwendet ... Variablennamen verwendet man dort wo die Wertzuweisung stattfindet face-wink.

Wenn du Variablennamen als Text interpretieren und in Code umwandeln willst nimmst du Invoke-Expression
AN34Mem
AN34Mem 17.01.2022 um 17:36:03 Uhr
Goto Top
Diese exakte Ausgabe (Schreibweise) wird benötigt: $Das_ist = $_ein_Test_OK_B
inklusive Dollarzeichen, und nicht Das_ist = _ein_Test_OK_B.!
Sowie muss "$Das_ist" zur weiteren Verarbeitung zur Verfügung stehen...
AN34Mem
AN34Mem 17.01.2022 um 17:39:41 Uhr
Goto Top
Du hast Recht hacktor. Mit Invoke-Expression dürfte es gehen....
149569
149569 17.01.2022 aktualisiert um 17:46:10 Uhr
Goto Top
Zitat von @AN34Mem:

Diese exakte Ausgabe (Schreibweise) wird benötigt: $Das_ist = $_ein_Test_OK_B
inklusive Dollarzeichen, und nicht Das_ist = _ein_Test_OK_B.!
Sowie muss "$Das_ist" zur weiteren Verarbeitung zur Verfügung stehen...

Na wenn's weiter nix is brauchst du noch nicht mal Invoke-Expression, einfach noch ein escaptes $ vor gepappt
$p1 = "Das"  
$p2 = "_ist"   
$p3 = "_ein_Test"  
$p4 = "_OK"   
$data = @("_A","_B","_C","_D")  
Set-Variable -Name "$p1$p2" -Value "`$$p3$p4$($data[1])"  
$Das_ist
Wert von der Variable $Das_ist ist dann
$_ein_Test_OK_B
AN34Mem
AN34Mem 17.01.2022 um 17:50:58 Uhr
Goto Top
Vielen Dank! hacktor für deine nette Hilfe.
AN34Mem
AN34Mem 17.01.2022 um 18:06:08 Uhr
Goto Top
Hacktor bei deinem Beispielen ist immer:
statt: $p1 = "$Das" $p1 = "Das"
statt: $p3 = "$_ein_Test" $p3 = "_ein_Test"

Damit stehe ich wieder am Anfang wenn ich die Schreibweise ändere.
Ich denke eher das die Lösung vermutlich bei Invoke-Expression liegt...
149569
Lösung 149569 17.01.2022 aktualisiert um 21:54:29 Uhr
Goto Top
Zitat von @AN34Mem:

Hacktor bei deinem Beispielen ist immer:
statt: $p1 = "$Das" $p1 = "Das"
statt: $p3 = "$_ein_Test" $p3 = "_ein_Test"

Damit stehe ich wieder am Anfang wenn ich die Schreibweise ändere.
Ich denke eher das die Lösung vermutlich bei Invoke-Expression liegt...

Ich weiß langsam ehrlich nicht mehr was du eigentlich willst, dann eben mit Dollar geht auch ...
$p1 = "`$Das"  
$p2 = "_ist"   
$p3 = "`$_ein_Test"  
$p4 = "_OK"   
$data = @("_A","_B","_C","_D")  
Set-Variable -Name "$p1$p2".replace('$','') -Value "$p3$p4$($data[1])"  
$Das_ist

Du baust da ehrlich gesagt ein Konstrukt was mir viel zu kompliziert gedacht erscheint weil du nicht alle Möglichkeiten der PS kennst, sowas habe ich noch nie gebraucht und ich arbeite schon lange mit der PowerShell. Du hast da sicher schon bei der Umsetzung ein konstruktiven Denkfehler eingebaut.
Es wäre jetzt also mal an der Zeit den Grund deines Vorhabens hier zu verdeutlichen. Dann lässt sich sicher besser helfen als mit solchen nichts sagenden Beispielen!
AN34Mem
AN34Mem 18.01.2022 um 08:03:57 Uhr
Goto Top
Wie am Anfang beschrieben wollte ich mit dem aufgeführten Beispiel legentlich die Problematik meiner Frage kurz aufzeigen. Dieses nichts sagende Beispiel hat genau das gezeigt um was es mir ging. Deine Lösungsvorschläge begrüße ich sehr, da es nun zum Ziel geführt hat. Invoke-Expression war ein weiterer Schlüssel der zur Lösung endlich beigetragen hat (bin nicht davon ausgegangen). Da ich nicht alle Möglichkeiten der PS kenne, und ich davon ausgehe, dass niemand auch alle Möglichkeiten nach Jahren kennen wird, bitte ich um Nachsicht wenn manche Fragen in eine Richtung geht die man selbst noch nie benötigt hat, bzw. benötigen wird.
Nochmals Danke hacktor für deine geschätzte Hilfe.