marcimarc85
Goto Top

Powershell prüfen ob Variable definiert wurde

Hallo,

Wie kann ich in Powershell prüfen, ob eine Variable existiert, oder nicht.

Ich habe eine environment Datei, in der alle Variablen definiert sind.

Nun habe ich ein Update-Script, was diese ebvironmnent Datei mit allen Variablen einliest.
Dort soll an einer Stelle geprüft werden, ob die Variable "$TempVar" existiert. Unabhängig von Ihrem Wert.

Also falls die Variable "$TempVar" existiert, dann installiere Komponente xy, wenn nicht, mach nichts.

Ich habe es mit
if (Test-Path variable:$TempVar)
if ($TempVar -ne $null
if (Get-Variable -Name $TempVar -ErrorAction SilentlyContinue)
versucht. Aber entweder bekomme ich immer die Ausgabe, dass der Wert der Variable nicht existiert, oder es wird direkt in die else-Ausgabe gesprungen, obwohl es die Variable an sich gibt, halt ohne Wert bzw nicht definiert.

Das muss doch simpel sein á la batch mit
if set %TempVar%

Content-ID: 8136287241

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

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

7907292512
7907292512 14.08.2023 aktualisiert um 10:47:43 Uhr
Goto Top
Du warst schon fast richtig, es ist aber ein kleiner aber feiner Unterschied ob du den Variablennamen mit oder ohne Dollarzeichen angibst, bei Get-Variable natürlich ohne, denn du willst ja nicht das diese zu ihrem Wert aufgelöst wird sondern der Name an sich genutzt wird 😉
if (Get-Variable -Name TempVar -ErrorAction SilentlyContinue){
  "Variable existiert"  
}else{
   "Variable existiert nicht"  
}
https://tio.run/##K8gvTy0qzkjNyfn/X6UktbhEwVbB0MiYKzNNwz21RDcssSgzMSknVU ...

S.
MarciMarc85
MarciMarc85 14.08.2023 um 10:47:41 Uhr
Goto Top
Zitat von @7907292512:

Du warst schon fast richtig, es ist aber ein kleiner aber feiner Unterschied ob du den Variablennamen mit oder ohne Dollarzeichen angibst, bei Get-Variable natürlich ohne den du willst ja nicht das diese zu ihrem Wert aufgelöst wird
if (Get-Variable -Name TempVar -ErrorAction SilentlyContinue){
  "Variable existiert"  
}else{
   "Variable existiert nicht"  
}
S.

Danke,stimmt., macht natürlich Sinn, aber dennoch funktioniert die Abfrage nicht wirklich. wenn die Variable existiert, dann pass es. wenn ich sie dann aber auskommentiere, dann ende ich aber trotzdem in der "Variable existiert" Ausgabe. Es scheint so, als würde das Auskommentieren die Variable als solche trotzdem weiter berücksichtigen und nicht wie einen Freitextkommentar sehen.
7907292512
Lösung 7907292512 14.08.2023 aktualisiert um 10:54:36 Uhr
Goto Top
Doch das Funktioniert einwandfrei!
https://tio.run/##K8gvTy0qzkjNyfn/X6UktbhEwVbB0MiYKzNNwz21RDcssSgzMSknVU ...
wenn die Variable existiert, dann pass es. wenn ich sie dann aber auskommentiere, dann ende ich aber trotzdem in der "Variable existiert" Ausgabe.
Dann hast du die Shell nicht vorher geschlossen, bzw. vor dem erneuten Ausführen die Variable vorher aus der PowerShell Session mit Remove-Variable entfernt!!

Du hast also einen Denkfehler was Sessions und deren Lebensdauer anbelangt.
Die ISE arbeitet hierbei immer in der selben Session, wenn du sie nicht schließt oder eine neue Shell aufmachst. Das kann solche Missverständnisse aufkommen lassen .
MarciMarc85
MarciMarc85 14.08.2023 um 10:58:55 Uhr
Goto Top
Zitat von @7907292512:

Doch das Funktioniert einwandfrei!
https://tio.run/##K8gvTy0qzkjNyfn/X6UktbhEwVbB0MiYKzNNwz21RDcssSgzMSknVU ...
wenn die Variable existiert, dann pass es. wenn ich sie dann aber auskommentiere, dann ende ich aber trotzdem in der "Variable existiert" Ausgabe.
Dann hast du die Shell nicht vorher geschlossen, bzw. vor dem erneuten Ausführen die Variable vorher aus der PowerShell Session mit Remove-Variable entfernt!!

Du hast also einen Denkfehler was Sessions und deren Lebensdauer anbelangt.
Die ISE arbeitet hierbei immer in der selben Session, wenn du sie nicht schließt oder eine neue Shell aufmachst. Das kann solche Missverständnisse aufkommen lassen .

Alles klar.

So scheint es dann jetzt zu funktionieren:

if (Get-Variable -Name TempVar -ErrorAction SilentlyContinue){
remove-variable TempVar
write-host "Variable existiert" }  
else{
write-host "Variable existiert nicht"   
}