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

Printed on: December 13, 2024 at 03:12 o'clock

149569
Solution 149569 Jan 06, 2022 updated at 10:14:47 (UTC)
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 Jan 06, 2022 at 10:11:28 (UTC)
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 Jan 06, 2022, updated at Jan 07, 2022 at 06:31:25 (UTC)
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.