Powershell Quick-Tip: Skriptteile als anderer Benutzer ausführen
Manchmal ist man in der misslichen Lage gewisse Teile eines PowerShell-Skripts als anderer Benutzer ausführen zu müssen. Kennt man die normale Kommandozeile denkt man direkt an den Run-As Befehl. Wie man das entsprechende PowerShell-Pendant verwendet, werde ich im Folgenden erklären.
Das Szenario
Wir haben ein Skript, dass zuerst Attribute eines Benutzers per LDAP aus dem AD auslesen soll und diese, wenn nötig, wieder setzt. Da es hierbei um Attribute des aktuell angemeldeten Benutzers geht, muss der erste Teil als der aktuelle Benutzer ausgeführt werden. Da dieser Benutzer aber keine Rechte hat die Attribute zu ändern, muss das Setzen als Administrator ausgeführt werden.
Run-As in der PowerShell
Das aus der CMD bekannte Kommando Run-as gibt es in der PowerShell leider nicht. Hier verwendet man am besten Start-Process mit dem Parameter -Credential. In unserem Fall rufen wir einfach eine neue PowerShell auf und übergeben den Skriptteil als Argument. Die Anmeldedaten bekommt man über Get-Credential:
Start-Process powershell.exe -Credential Get-Credential -ArgumentList "Skript.ps1"
Die Lösung
Wir teilen unser Skript in 2 Teile:
Das Skript Teil_A.ps1 führt die Abfrage der Attribute aus, führt dann das Skript Teil_B.ps1 aus und übergibt diesem den aktuellen Benutzer als String.
Das Skript Teil_B.ps1 bekommt den Benutzer übergeben und führt die Änderung der Attribute aus.
Teil_A.ps1 sieht also wie folgt aus:
... $currentUserRead = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name $tempUser = $currentUserRead.Split("\") $user = $tempUser[1] Start-Process powershell.exe -Credential Get-Credential -ArgumentList "Teil_B.ps1 $user" ...
Teil_B.ps1 sieht wie folgt aus:
param([String]$user) ...
- 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