Wir fangen mal hinten an. Du hast Arbeit investiert und besitzt einige Powershell Skripte oder gar ein Modul die auf deinem Rechner laufen. Jetzt möchtest du für administrative Zwecke wie das Installieren von Software oder Updates von Programmteilen in der gesamten Domäne darauf zugreifen.
- Die Skripte auf jeden Rechner kopieren ist unhandlich und schwierig bei Codeupdates
- Die Powershell ist restriktiv eingestellt und lässt nicht einfach Skripte von überall zu.
Also nimmst du deine Skripte und kopierst die in eine zentrale Freigabe wie in den Bildern gezeigt, zB \\server\share\Repository\Powershell\Skripte
Super, zentral verfügbar. Aber wenn du die Powershell auf dem Client oder Server startest, sind die Skripte nicht verfügbar. Jetzt kommt die profile.ps1 ins Spiel. Es gibt vier Orte wo die liegen kann, die weitreichendste Stelle ist der Programmordner der Powershell selbst auf dem Rechner "explorer $pshome".
Damit die profile auf die Rechner kommt, wird die von einer GPO beim Login an den Rechner verteilt.
In der profile.ps1 steht drin, was die Powershell zum Sessionbeginn macht. In dem Falle erweitert sie ihre unterstützten Pfade
"$env
SModulePath += ..." und "$env
ath += ..." um den zentralen Modul- und Skriptordner.
Heißt ganz simpel: alle Skripte die in den zentralen Pfaden liegen sind jetzt direkt benutzbar wie "mein-skript.ps1" oder "Do-MyCmdlet". Ein Aufruf per Pfad ist nicht mehr nötig.
Abschließend muss die Sicherheit geregelt werden, das macht die zweite GPO zur ExecutionPolicy. Im Prinzip sind die Skriptpfade Vertrauenswürdige Pfade aus denen Skripte ausgeführt werden dürfen (wie VBA Makros in Office). Deshalb genügt es in der GPO RemoteSigned als Richtlinie auszuführen. Unrestricted ist nicht notwendig.
Für Clients bist du hier fertig. Wenn die GPOs angewendet wurden, die profile.ps1 verfügbar ist, dann läuft es.
Bei Servern muss entweder per GPO oder händisch die Internetsicherheit deaktiviert werden. Das ist im Servermanager > lokaler Server > Verstärkte Sicherheitsrichtlinie für IE (Administratoren). Weiß der Geier wieso die Powershell am Rechtesystem des IE hängt, jedenfalls muss die deaktiviert werden. Ab dann läuft es auch auf Servern.
Für Exchange müsste der Aufruf der Exchange Shell glaube ich, bei anderen Sachen reicht das Hinzufügen der SnapIns. Als Beispiel bei uns, "unwichtige" Server per Veeam Zip sichern. Im Skriptpfad liegt eine VeeamZip.ps1. Da drin steht dann nur:
PowerShell:
Add-PSSnapin VeeamPSSnapin
Find-VBRHvEntity -Name "<Servername>" | Start-VBRZip -Folder "Path" -Compression 6 -AutoDelete In2Weeks
Und das wird über die Aufgabenplanung getriggert. -command muss der letzte Parameter sein, das steht irgendwo in der PS-Doku.