Powershell Quick-Tip: lokale und globale Variablen
Beim Erstellen eines Skripts ist es oft hilfreich einzelne Programmteile als eine Funktion im Code anzulegen. Hier kann man in unerwartete Probleme mit Variablen geraten.
Das Szenario
Wie in fast jeder Programmiersprache, so gibt es auch in der PowerShell die Unterscheidung zwischen lokalen und globalen Variablen bzw. entsprechenden Unterformen. Eine, innerhalb eines Klammer-Blocks deklarierte, Variable überschreibt für den Klammer-Block eine außerhalb definierte Variable mit demselben Namen. Dies ist normal und auch so gewünscht.
Das Problem
In der PowerShell gibt es sogenannte Scopes, die den Zugriff auf Variablen, Aliase, Funktionen und PowerShell Skripte schützen.
$variable = "test" function test($foo) { $variable = $foo } test(“neuer Test”) echo $variable
Echo gibt hier unerwarteter Weise test aus. Die äußere Variable $variable bekommt außerhalb der Funktion den Wert test. Mit $variable wird auch eine neue Variable innerhalb der Funktion instanziiert. Diese Variable ist allerdings nur in dem Scope der Funktion sichtbar, in der sie erstellt wurde, und in allen Child Scopes. Die äußere Variable bleibt also unangetastet.
Die Lösung
Um ein solches ungewolltest Dilemma zu vermeiden, kann man in der PowerShell den Zugriff konkret auf den globalen-Kontext legen. Anstatt mit $NAME legt man die Variablen mit $global:NAME an:
$global:variable = "test" function test($foo) { $global:variable = $foo } test(“neuer Test”) echo $variable
Nun gibt echo wie gewünscht neuer Test aus.
- ASP.NET 1
- Active Directory 41
- Administration Tools 1
- Allgemein 60
- Backup 4
- ChatBots 5
- Configuration Manager 3
- DNS 1
- Data Protection Manager 1
- Deployment 24
- Endpoint Protection 1
- Exchange Server 62
- Gruppenrichtlinien 4
- Hyper-V 18
- Intune 1
- Konferenz 1
- Künstliche Intelligenz 7
- Linux 3
- Microsoft Office 11
- Microsoft Teams 1
- Office 365 11
- Office Web App Server 1
- Powershell 21
- Remote Desktop Server 1
- Remote Server 1
- SQL Server 8
- Sharepoint Server 12
- Sicherheit 1
- System Center 10
- Training 1
- Verschlüsselung 2
- Virtual Machine Manager 1
- Visual Studio 1
- WSUS 7
- Windows 10 12
- Windows 8 9
- Windows Azure 4
- Windows Client 1
- Windows Server 24
- Windows Server 2012 7
- Windows Server 2012R2 15
- Windows Server 2016 7
- Windows Server 2019 2
- Windows Server 2022 1
- Zertifikate 4