Jump to content

PowerShell Abmeldeskript via GPO funktioniert nicht


Recommended Posts

Hi all

 

Ich möchte beim Abmelden eines Users ein PS Skript laufen lassen.

Das PS Skript sucht im Pfad %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup nach bestimmten .Ink Dateien (Verknüpfungen) und löscht diese aus diesem Pfad (Startmenü Win10).

Starte ich das Skript manuell z.B., direkt aus dem Speicherort \\DomainXY.Local\NETLOGON\Scripts\ heraus, wird das PS Skript wie gewünscht ausgeführt, ohne Fehler.

 

GPO, Abmelde Skripts

Problem: Wenn ich den User vom Client abmelde, dann steht sicher ca. 10 Minuten lang: Der Abmeldevorgang läuft... Danach hat anscheinend das PS Skript nichts im Pfad %AppData% gelöscht, so wie es scheint. Denn der %AppData% Folder ist per Folder Redirection (Ordnerumleitung) umgeleitet. Ich habe dann einfach gleichzeitig auf dem Fileserver im Pfad der Ordnerumleitung geprüft, ob die Verknüpfungen weg sind, sprich, gelöscht wurden. War aber nicht der Fall. Warum, weiss ich nicht und versuche genau diesem Problem mit euer Hilfe auf den Grund zu gehen :-)

 

Bemerkung: der %AppData% Pfad wird bei meinem Test Computer wie erklärt per GPO/ Ordnerumleitung umgeleitet, der Pfad ist \\Server\FolderRedirectShare\BenutzerX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Und eben, wie vorhin erwähnt, führe ich den PS Skript manuell auf dem Client aus, dann werden in diesem Pfad die entsprechenden Verknüpfungen wie gewünscht gelöscht.

Des Weiteren bin ich per RDP auf meinem Test Client verbunden und führe so den Abmeldetest durch.

 

Via GPO PS Skript und .bat File getestet

1. via GPO/ Benutzerkonfiguration/ Richtlinien/ Windows-Einstellungen/ Skripts/ PowerShell-Skripts (Es gibt ja hier 2 Reiter: Reiter Skripts und eben den Reiter PowerShell-Skripts), hinzufügen und den Pfad z um Skript angegeben, also \\DomainXY.Local\NETLOGON\Scripts\nameSkript,ps1 = Dieser Pfad steht im Feld Skriptname und im Feld Skriptparameter habe ich folgendes hineingeschrieben: -ExecutionPolicy Bypass

 

2. Ich habe ein .bat File im Reiter Skripts hinterlegt und in diesem dann den Powershell Skript aufgerufen, aber auch da: Genau das gleiche Abmeldeverhalten. Der Abmeldevorgang dauert einfach ca. 10 Min oder sogar noch länger.

Mich würde interessieren, was der Client beim Abmeldevorgang auf Grund nun meines hinterlegten Skripts in der GPO da konkret so lange "wurstelt" *lach*. Wie kann ich das am einfachsten herausfinden?

 

Werden sonst noch Skripts beim Abmelden ausgeführt?

- 1x ein .bat Skript

- und 1x ein .vbs Skript

 

 

Link to post
vor 2 Stunden schrieb andrew:

Starte ich das Skript manuell z.B., direkt aus dem Speicherort \\DomainXY.Local\NETLOGON\Scripts\ heraus, wird das PS Skript wie gewünscht ausgeführt, ohne Fehler.

Leg das Script lokal in ein Verzeichnis und probier es erneut. Evtl. ist die Verbindung schon gekappt und es wird nichts ausgeführt.

 

Um zu prüfen ob das Script ausgeführt wird, kannst Du dir ja zuerst eine TXT im o.g. Verzeichnis erstellen lassen. Als Inhalt evtl. den Inhalt des o.g. Verzeichnisses auflisten lassen.

Link to post
vor 3 Stunden schrieb andrew:
 

 also \\DomainXY.Local\NETLOGON\Scripts\nameSkript,ps1 = Dieser Pfad steht im Feld Skriptname und im Feld Skriptparameter habe ich folgendes hineingeschrieben: -ExecutionPolicy Bypass

 

Das ist natürlich falsch. -ExecutionPolicy ist kein Parameter Deines Skripts, sondern ein Parameter von powershell.exe 

Link to post

Hi all

 

Habe in der Zwischenzeit folgende Dinge versucht und bin leider bis jetzt erfolglos geblieben:

 

GPO/ Benutzerkonfiguration/ Richtlinien/ Windows-Einstellungen/ Skripts/ PowerShell-Skripts (Es gibt ja hier 2 Reiter: Reiter Skripts und eben den Reiter PowerShell-Skripts), hinzufügen und den Pfad z um Skript angegeben, also \\DomainXY.Local\NETLOGON\Scripts\nameSkript,ps1 = Dieser Pfad steht im Feld Skriptname und das Feld Skriptparameter habe ich nun leer gelassen.

- den Skript Pfad auf eine andere Art hinterlegt, nämlich so wie hier beschrieben Login-Scripts über GPOs und User-Eigenschaften konfigurieren | WindowsPro im Abschnitt "Login- und Logoff-Scripts über GPOs"

- Einen anderen PS Skript erstellt, welcher einen Testordner im LW C:\ erstellt. Also z.B. C:\Test\Testunterordner und wie vorhin gerade auf den Link verwiesen, auf die gleiche Art und Weise den Skript Aufruft gemacht, jedoch auch erfolglos.

- Die lokal installierte Antiviren Software, Kaspersky Endpoint Security for Windows komplett deinstalliert, um auch den KS ausschliessen zu können und die Schritte von oben wieder versucht, Problem immer noch vorhanden.

- Ein Batch File mit der Endung .bat geschrieben, welches zuerst auf dem Client im LW C:\ folgende Ordnerstruktur anlegt:; C:\Ordnrename\Skript (Beispielnamen). Danach die PS Skriptdatei vom NETLOGON Share auf dem DC via XCOPY Befehl lokal in den, wie soeben beschriebenen, lokalen Ordner auf dem Windows 10 Client kopiert und zum Schluss kommt noch eine Zeile, welche via powershell.exe -File "Pfad zum File" -ExecutionPolicy -ByPass das PS Skript aus dem .bat File heraus aufruft. Diese löscht dann bestimmte Verknüpfungen im Startmenü vom Windows 10 Client. Der Pfad des Startmenüs ist %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup

 

Info: Die Skripte habe ich soweit möglich, zuerst manuell geprüft, heisst:

- den PS Skript habe ich via PowerShell Konsole getestet. PS Konsole geöffnet, den Pfad zur PS Datei angegeben (\\Domain\netlogon usw.)

- Im DOS Fenster kann man ja nicht wie soeben beschrieben, in der PS Konsole direkt einen UNC Pfad aufrufen und so das .bat File ansteuern und starten. Da das Logoff BAT File direkt im NETLOGON Share liegt, habe ich einfach via Dateiexplorer mit der rechten Maustaste vom Windows Client aus das BAT File angeklickt, rechte Maustaste und via Kontextmenü den Befehl: "öffnen" ausgeführt. Zuerst hatte ich im BAT File nach jedem Befehl eine Pause eingebaut, damit ich so manuell, Zeile für Zeile abarbeiten und somit testen konnte, bis ich am Schluss die Gewissheit hatte, dass jede Zeile im .bat File auch wirklich funktioniert.

 

Am Schluss natürlich via GPO/ Benutzerkonfiguration, Skripte (abmelden) wieder direkt via UNC Pfad direkt auf das .bat File verwiesen, welches ja im NETLOGON Share liegt.

 

Egal, was ich gemacht habe, IMMER wenn per RDP auf dem Windows 10 Test Client bin, gpupdate /force ausgeführt hatte und danach den Benutzer abmeldete, dauerte der LOGOFF Vorgang immer ganz genau 10 Minuten und 20 Sekunden Und: gemacht wurde jeweils NICHTS, nada!

 

Was läuft hier falsch?

Link to post

Was ich oben schon schrieb: 20 Sekunden ist normal, 10 Minuten ist der Timeout für Skripts - "irgendwas" in Deinem Skript wartet auf eine Bestätigung (Ja/Nein/Sicher/Vielleicht). Warum weiß ich nicht und kann ich per Forum auch nicht genauer diagnostizieren.

Link to post

Hi,

 

eine Option könnte Start-Transcript (Start-Transcript (Microsoft.PowerShell.Host) - PowerShell | Microsoft Docs) im Script sein. Alternativ ein "-Confirm:$false -Force" beim "Remove-Item"(?).

 

Am 29.6.2021 um 15:53 schrieb andrew:

Das PS Skript sucht im Pfad %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup

Sucht das Script tatsächlich in %AppData% oder in $env:APPDATA?

 

Gruß

Jan

  • Like 1
Link to post

Möchtest du/ Ihr es genauer diagnostizieren?

Was würdest Du/ Ihr den machen, wenn Ihr das gleiche Ziel verfolgen müsstest wie ich und habt oder hättet schon derart viel wie ich ausprobiert und es klappt nach wie vor nicht?

 

Für mich pers. heisst schon seit eh und je der berühmte Satz: "geht nicht, gibt es nicht" :-)

Habe 2 verschiedene Skripts geschrieben, da das eine nicht klappte, habe ich ein anderes geschrieben, welches etwas komplett anderes macht.

 

- das eine Skript sollte im Pfad %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup div. Verknüpfungen löschen. der Ordner %AppData% ist per Ordnerumleitung auf den Fileserver umgeleitet.

- das andere Skript, auch PowerShell (als zusätzlichen Test erstellt), hat auf dem Windows 10 Client lokal unter C:\ Ordner erstellt - was auch, wie im im anderen Skript wie erwähnt, manuell ohne Fehler klappte.

 

Unterschied manuelles Ausführen eines Skriptes vs. automatische Ausführung via GPO

Die Frage ist doch nun, was ist anders, wenn ein PS Skript oder sonst eine Batch File per GPO ausgeführt wird (Abmelde Skript), als wenn ich/ man als angemeldeten Benutzer unter Windows 10 manuell die PS Konsole aufruft und den Skript und oder unter Windows 10 den Dateiexplorer aufruft (z.B. direkt aus dem NETLOGON Share) und so den Skript anstosst.

 

Ausschlussverfahren/ Microsoft Vorgaben in den GPO Einstellungen

Punkt 01: die GPO Einstellung unter Benutzerkonfiguration/ Richtlinien/ Windows-Einstellungen/ Skripts/ PowerShell-Skripts ist extra für PS Skripts entworfen worden. 

Punkt 02: der besagte PS Skript habe ich manuell in der PS Konsole erfolgreich ausführen können.

 

Aus meiner Sicht bleibt da wenig Spielraum, dass dann beim Ausführen eines PS Skripts beim Abmelden eines Benutzers noch was schief laufen kann Und: Trotzdem, wie schon oft hier geschildert, habe ich es bis jetzt nicht hingekriegt, das kann NICHT sein!

 

Anforderungen für das Abmelden von PS Skripts

Leider fand ich nirgends ein Microsoft Artikel, welcher besagt, dass man bei einem Abmeldeskript z.B. nicht aus einem NETLOGON Share ausführen darf, da vielleicht, so wie das hier schon Jemand vermutet hat, beim Abmelden vielleicht plötzlich der Zugriff vom Windows 10 Client aus auf den NETLOGON Share nicht mehr gegeben ist. Wen dem so wäre, so müsste es ja irgendwelche Grundsatzanforderungen seitens Microsoft geben, welche hier ganz klar die Rahmenbedingungen festlegen, was bei einem Abmeldeskript möglich ist und was nicht.

 

Ich meine, wer will schon im Trüben fischen? Ich sicher nicht :-(

 

Logon Scripts don't rund for five minuutes after a user logs on to a Windows 8/ 10 computer. 

Hier ist der Link https://docs.microsoft.com/en-us/troubleshoot/windows-client/group-policy/logon-scripts-not-run-for-long-time

 

Da habe ich einen Link gefunden und auch die entsprechenden GPO Settings vorgenommen, in der Hoffnung, dass diese Einstellung auch für das Abmelden von Skripts gültig ist. Fand aber keinen Hinweis, dass dieser Artikel auch für das Abmelden von Skripts gültig wäre. Wie auch immer, habe diese Einstellung auch verwendet, aber ohne Erfolg. 10min und 20 Sekunden den blauen Screen beobachten "der Abmeldevorgang läuft" finde ich jetzt nicht sehr spannend  bzw. sexy :-) kommt dazu, dass nicht mal was gemacht wurde, also das Warten hat sich nicht mal gelohnt :-(

Link to post
vor 1 Minute schrieb andrew:

Habe 2 verschiedene Skripts geschrieben, .....

 

... wie wär's, wenn Du einfach die Skripte hier mal postest? Vielleicht liegt's ja doch am Skript selbst und nicht am Drumherum!?

Link to post

Sehe ich auch so - poste mal:

 

- was GENAU steht in der GPO, die das Skript definiert?

- was GENAU ist im Code des Skripts enthalten?

 

Fängt schon damit an, daß "in der PS-Konsole ausführen" eben NICHT das gleiche sein muß wie als Logoff-Skript.

 

Und ganz allgemein: Logging hilft immer.

Edit: Aktiviere mal die ausführlichen Meldungen - https://gpsearch.azurewebsites.net/#1842

Edited by daabm
Link to post

sehr gerne.

Das PS Skript, um welches es geht, ist dieses hier. Ziel: Es soll im Autostart Menü des Benutzers von Windows 10 nach bestimmten Verknüpfungen suchen und diese einfach löschen. 

 

### Definition des Suchpfades

$Suchverzeichnis = "$Env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"

 

### zu löschende Dateien suchen und in Variablen speichern

$Outlook = Get-ChildItem -Path $Suchverzeichnis -Recurse | Where-Object {$_.FullName -match "Outlook"}

$Edge = Get-ChildItem -Path $Suchverzeichnis -Recurse | Where-Object {$_.FullName -match "Edge"}

 

### Dateien löschen

$Outlook , $Edge  | Remove-Item -Force -Confirm:$False

 

Bemerkung/ zusätzliche Inputs

- Bei meinem Test Client zeigt der Ordner %AppData% per Ordnerumleitung auf den Fileserver. 

- wenn ich die Tests durchführe, dann verbinde ich mich von meinem PC per RDP auf das Notebook mit Windows 10 und teste dann bzw. logge den angemeldeten User so vom System ab

 

Der %AppData% Pfad wird bei meinem Test Computer wie erklärt per GPO/ Ordnerumleitung umgeleitet, der Pfad ist \\Server\FolderRedirectShare\BenutzerX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

 

Führe ich den Skript manuell aus, werden die gewünschten Verknüpfungen im besagten Pfad erfolgreich gelöscht.

Link to post

...warum nur die Hälfte? Was genau ist in deiner GPO definiert? Wenn das ein UNC-Pfad ist: ExecutionPolicy und IE-Zonenzuordnung beachten!

Edit: Wenn alles nichts hilft, Batch-Wrapper und Output mit >Logfile 2>&1 umleiten, das geht immer.

Edited by daabm
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...