Dass man mit der PowerShell wesentlich komfortabler programmieren und Aufgaben erledigen kann, als mit der guten alten Kommandozeile bzw. Batch-Dateien, dürfte seit langem kein Geheimnis mehr sein. Daher ist es naheliegend, insbesondere wenn die entsprechenden Aufgaben sonst nicht gut umsetzbar sind, auch für ein Benutzer-Anmeldeskript innerhalb einer Windows-Domäne auf die PowerShell zurückzugreifen. Dies geht allerdings nicht ohne einen kleinen Trick.
Macht es Sinn PowerShell-Skripte als Anmeldeskripte zu verwenden?
Grundsätzlich braucht man das natürlich nur ändern, wenn man auch etwas neues umsetzen muss, wobei man auf die PowerShell angewiesen ist und man diese Aufgabe in einer Batch-Datei nur erschwert umsetzen könnte. Einfach nur die bereits vorhandenen Batch-Dateien in PowerShell umschreiben ist da eher sinnlos, außer man hat Langeweile.
In meinem letzten Beitrag ging es darum, einen Drucker per PowerShell zum Standarddrucker zu machen, in Abhängigkeit vom leider variierenden Namen („umgeleitet XX“) beim Durchschleifen in eine RDP-Sitzung. Diese Aufgabe ist mit der PowerShell definitiv leichter zu lösen, als mit einer Batch-Datei oder irgendwelchen VB-Skripten. In dieser müsste man vermutlich umständlicher den passenden Druckernamen ermitteln, was in einer PowerShell-Abfrage recht einfach als „Einzeiler“ möglich ist. Deshalb habe ich mich für ein PowerShell-Skript entschieden.
Problem bei Nutzung von PowerShell-Skripten als Anmeldeskript
Leider kann man bei einem Benutzer im Active Directory nicht einfach das PowerShell-Skript als Startskript hinterlegen. Es passiert dann bei dessen Anmeldung einfach nichts. Dies scheint auch nicht an irgendwelchen Rechten für die Skriptausführung zu liegen, sondern einfach von Haus aus nicht unterstützt zu werden. Das ist schade, aber kein Hindernis.
Lösung um PowerShell-Skripte als Anmeldeskript zu verwenden
Wie so oft geht es dann leider nur mit einem Trick. Man nutzt einfach weiterhin eine Batch-Datei als Anmeldeskript bzw. als „Platzhalter“, welche die für den Benutzer bestimmte PowerShell-Datei aufruft.
Dies geht z. B. mit folgendem Befehl, ohne das irgendetwas bzgl. der Ausführungsrechte für die PowerShell beachtet werden muss:
1 |
powershell.exe -noninteractive -command \\DC\SYSVOL\blub.local\scripts\User.ps1 |
Denn durch den Parameter „noninteractive“ umgeht man die Ausführungsrichtlinie und das Skript wird ohne weitere Nachfragen still und leise im Hintergrund ausgeführt.
Mehr Komfort um PowerShell-Skripte als Anmeldeskript aufzurufen
Wenn man für jeden Nutzer ein individuelles PowerShell-Skript hat, könnte man z. B. mit nur einer einzigen Batch-Datei arbeiten, welche man dann bei jedem Benutzer als Anmeldeskript hinterlegt. Diese könnte dann, wenn das PowerShell-Skript der Einfachheit halber so heißt wie auch der Nutzername lautet, einfach mit Hilfe der Umgebungsvariable %username% das Skript aufrufen:
1 |
powershell.exe -noninteractive -command \\DC\SYSVOL\blub.local\scripts\%username%.ps1 |
Voilà! Beim nächsten Anmelden eines beliebigen Benutzers wird dann das entsprechende Skript ausgeführt!
Screenshots mit PowerShell automatisch unter Windows speichern
Welche PowerShell-Version habe ich? – PowerShell-Version anzeigen
Was ist PowerShellCore? Windows PowerShell unter Linux und MacOS?
Powershell und CMD: Clear um Konsole zu leeren?
Powershell: Sudo-Befehl wie unter Linux nutzen für Administratorrechte?
COM-Port eines Geräts ändern per Powershell
CMD/Powershell: Ping-Ergebnis mit Errorlevel auswerten
Powershell: Netzwerkadapter-Konfiguration ändern (IP-Adresse, Gateway, DNS, DHCP)
Powershell-Skript als Benutzer-Anmeldeskript in einer Domäne nutzen?
Powershell: Fenster nach Skriptausführung nicht automatisch schließen
Powershell: UTF8-Problem beim Export
XML-Bearbeitung mit Powershell
Replace und Escaping in Powershell
MessageBox mit Powershell auf anderen Computern anzeigen
While- und Until-Schleifen in PowerShell und Batch
Einfaches inkrementelles Backup mit Powershell
Einfache Außer-Haus-Sicherung mit Powershell
Schnittstelle von XML zu MS-SQL mit Powershell realisieren
Powershell: Automatische Anwendungssteuerung
Macht die ExecutionPolicy für Powershell-Skripte Sinn?
Wiederkehrende E-Mail-Abwesenheitsnotiz für Outlook mit Powershell
HyperV-Netzwerkadapter per Powershell umbenennen und entfernen
Powershell: DELL Service Tags auslesen
Powershell-Backup-Skript für den Thunderbird-Profilordner
Download-Skript in Powershell
Einfache Powershell-Skripte
Java-Anwendungen über CMD oder Powershell starten
Pfad im Explorer schneller kopieren – auch als vollständigen UNC-Pfad
Windows 11: Startmenü anpassen, klassische Taskleiste, links ausrichten
Wie lange läuft mein PC schon? – PC Laufzeit auslesen unter Windows 10
Windows 10: Standorttyp des Netzwerks ändern
Windows Server 2016: WSUS startet nicht vernünftig