tomtombon
Goto Top

Variablen in Powershell

Moin Moin,

Ich komme mir etwas... vor.

Ich will ein Powershell script marginal anpassen.
Und zwar wirklich nur Namensvariablen erstellen und die entsprechend einsetzen.

Onkel Duck und Tante Google waren auch keine echte Hilfe.
Es ist wahrscheinlich in irgendwelchen Grundanleitungen drinnen, die Ich aber nicht habe face-sad
In Batch..
Trivial.

Hier will es nicht.

Ich bin gekommen zu:
$Env:SpeicherPfad="c:\TMP-DATA"  
$Env:ErgebnisDatei=SpeicherPfad\([datetime]::UtcNow).tostring("yyyy-MM-dd__HHmm").$env:computername.<Skript-Name>.txt  
if (!(Test-Path SpeicherPfad)) {md SpeicherPfad}

Der Ansatz sollte eigentlich selbsterklärend sein.
Ich habe einen Ordner TMP-Data in den Ich immer ermittelte Daten in einer TXT oder CSV speichere. sortiert nach Erstellzeit und PC Name.
In Batch kein Problem für mich.
Aber hier scheitere Ich daran die Variablen aufzurufen.


Ich hatte herausgelesen das sie ohne Sonderzeichen (also Nicht %xx%) aufgerufen werden sollen.
Das es zu beachtende Aspekte gibt mit einfachen und doppelten Anführungszeichen habe Ich auch gelesen, ist ja in Batch auch.

Konkret geht es um 2 Arten der Nutzung der obigen Variablen:

1.
Write-Output xxxx | Out-file ErgebnisDatei
2.
Aufruf der Datei
ErgebnisDatei

Nehme Ich eine gekürzte Version in Klartext statt Variable,
c:\TMP-DATA\$env:computername.<Skript-Name>.txt
Funktioniert der Rest einwandfrei.


Kann mir einer einen kleinen entsprechenden Klaps geben?
face-smile
Danke

Content-ID: 1695189073

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

Ausgedruckt am: 23.11.2024 um 08:11 Uhr

149569
Lösung 149569 06.01.2022 aktualisiert um 11:14:47 Uhr
Goto Top
Da stimmt so einiges nicht... Variablen benutzt man mit Dollarzeichen vor dem Namen, das nur so nebenbei.

Grundlagen
about_Variables
Powershell Leitfaden für Anfänger
$speicherpfad = "c:\TMP-DATA"  
if (!(Test-Path $speicherpfad)) {md $speicherpfad -Force | out-null}
$ergebnis = "$speicherpfad\$([datetime]::UtcNow.tostring("yyyy-MM-dd__HHmm")).$env:computername.BlaBlub.txt"  
$ergebnis

Zur Info: Das Anlegen von $env:Variable übersteht das Schließen der Shell nicht (falls du das damit erreichen wolltest, wenn man wirklich permanente Umgebungsvariaben erstellen will macht man das mit der [System.Environment]::SetEnvironmentVariable() Methode.
https://docs.microsoft.com/de-de/dotnet/api/system.environment.setenviro ...
manuel-r
manuel-r 06.01.2022 um 11:11:28 Uhr
Goto Top
Außerdem wäre es ziemlich widersinnig System- oder Benutzervariablen zu setzen um auf diese dann im weiteren Verlauf wieder zuzugreifen. In aller Regel werden Variablen nur innerhalb des Script benutzt und benötigt. Ihr Inhalt ist i.d.R. nach Ende des Scripts obsolet.
In wenigen Fällen macht es Sinn den Inhalt einer Variablen dauerhaft für den Benutzer oder das System in Umgebungsvariablen zu schreiben.

Manuel
TomTomBon
TomTomBon 06.01.2022, aktualisiert am 07.01.2022 um 07:31:25 Uhr
Goto Top
Sowas In der Art dachte Ich mir.
Es ist wie Ich ja schon sagte trivial, aber wenn man daneben tritt und den Weg nicht mehr findet ist so ein kleiner Klaps hilfreich face-wink

@manuel-r
Es war schon so geplant das es nur in dem Skript und nicht dauerhaft fest gelegt ist.
Trotzdem Danke für den Hinweis.