joe2017
Goto Top

Powershell Logon Script Problematik

Schönen guten Morgen,

ich habe eine Frage an die Spezialisten hier. Denn ich bin gerade ratlos und am verzweifeln.

Ich habe in meinem Domain Controler in einer GPO ein Logon Script eingestellt.
Computer Configuration - Policies - Windows Settings - Scripts (Startup/Shutdown) - Startup (Powershell Scripts)

Mit diesem Script stelle ich alle möglichen Windows Konfigurationen ein. Jetzt zu meinem Problem.
Ich habe ein zweites Powershell Script mit einem WindowsForm erstellt welches ich laden möchte.
Das funktioniert auch soweit. Jedoch wird dieses Fenster nach einer gewissen Zeit beendet. Das Problem ist auch, dass die Explorer Shell zu diesem Zeitpunkt noch nicht geladen ist. Ich habe schon alles mögliche getestet.

& Path\to\script.ps1
Start-Job -FilePath Path\to\script.ps1

Ich habe in meinem zweiten Script auch schon zu erst den explorer geladen (Start-Process explorer.exe)

Ich könnte jetzt natürlich das Script in den Autostart stecken, oder per GPO (User Configuration - Policies - Administrative... - System - Logon - Run these programs at user logon) starten. Jedoch dauert das viel zu lange. Hier wartet man mindestens 10-15 Sekunden.

Könnt Ihr mir hierzu noch einen Tipp geben?
Kann man die explorer Shell auch separat vor laden lassen?

Danke

Content-ID: 1290757196

Url: https://administrator.de/contentid/1290757196

Ausgedruckt am: 12.11.2024 um 22:11 Uhr

Tezzla
Tezzla 22.09.2021 um 09:42:09 Uhr
Goto Top
Moin,

für Benutzereinstellungen eignet sich das ActiveSetup wunderbar.
Dies ist ein Computersetting, welches beim Windows Logon automatisch getriggert wird, wenn es für den Benutzer noch nicht ausgeführt worden ist. Der Helge hat das ganz gut erklärt.

VG
DerWoWusste
DerWoWusste 22.09.2021 aktualisiert um 10:18:59 Uhr
Goto Top
Hi.

"Ich habe in meinem Domain Controler in einer GPO ein Logon Script eingestellt.
Computer Configuration..."
Nein, das ist kein Logonskript, sondern ein Startupskript, das nicht im Userkontext läuft und mit der Explorer.exe nicht interagieren kann.

Nimm ein Logonskript, User Configuration - Policies - Windows Settings - Scripts... und verändere zuvor die Ausführungsverzögerung für diese auf 0.
joe2017
joe2017 22.09.2021 um 09:59:37 Uhr
Goto Top
Moin Tezzla,

ich glaube nicht, dass dies das richtige für mich ist. Mit meinem aktuellen Logon Script hab ich kein Problem.
Ich möchte jedoch aus diesem ersten Logon Script ein weiteres PS Script starten welches ein Oberfläche mit WindowsForm bereitstellt. Hierzu sollte natürlich die explorer Shell geladen sein.

Kann man das zweite PS Script nicht irgendwie komplett losgelöst von dem ersten Script starten?
Und am besten die Ausführung erst starten wenn die explorer shell gestartet wurde. Quasi ein warte auf Process einbauen.

Das würde mir sicherlich helfen.
Tezzla
Tezzla 22.09.2021 aktualisiert um 10:25:21 Uhr
Goto Top
Zitat von @joe2017:
Kann man das zweite PS Script nicht irgendwie komplett losgelöst von dem ersten Script starten?
Und am besten die Ausführung erst starten wenn die explorer shell gestartet wurde. Quasi ein warte auf Process einbauen.

Das würde mir sicherlich helfen.

Invoke-Expression -Command "C:\Dies\Das\Script2.ps1"  
Der Desktop wird angezeigt, wenn die Explorer.exe läuft. Wenn du darauf prüfst und noch einen Start-Sleep danach einsetzt, kann man das so machen.

An die Execution Policy denken face-smile
joe2017
joe2017 22.09.2021 aktualisiert um 10:38:45 Uhr
Goto Top
Ich habe herausgefunden, dass ich mit folgendem Befehl das Script losgelöst starten kann:
start-process powershell.exe -ArgumentList "-file \path\to\file.ps1"  

Jedoch funktioniert das warten auf die explorer.exe nicht.
DerWoWusste
DerWoWusste 22.09.2021 aktualisiert um 10:40:47 Uhr
Goto Top
Nochmal: das ist kein Logonskript. Es läuft als Systemkonto und schert sich nicht um den Logon.
Tezzla
Tezzla 22.09.2021 um 10:44:55 Uhr
Goto Top
Zitat von @joe2017:

Ich habe herausgefunden, dass ich mit folgendem Befehl das Script losgelöst starten kann:
> start-process powershell.exe -ArgumentList "-file \path\to\file.ps1"  
> 

Jedoch funktioniert das warten auf die explorer.exe nicht.

Da wir hier nicht im Spuren lesen ausgebildet sind, poste doch mal, was du da machst. Im Detail.
joe2017
joe2017 22.09.2021 um 10:53:16 Uhr
Goto Top
Also in meinem Logon Script wird folgendes ausgeführt:
Computer Configuration - Policies - Windows Settings - Scripts (Startup/Shutdown) - Startup (Powershell Scripts)
if ($env:COMPUTERNAME -match "xyz") {  
    Start-Process powershell.exe -ArgumentList "-file \\path\to\script_preload.ps1"  
}


Somit wir eine neue Instanz von powershell gestartet welche auf die explorer shell warten sollte.
$started = $false
Do {
    $status = Get-Process explorer -ErrorAction SilentlyContinue
    If (!($status)) { Sleep 1 }
    Else { Start-Process powershell.exe -ArgumentList "-file \\path\to\WindowsFormScript.ps1" ; $started = $true }  
}
Until ( $started ) 

Nachdem die explorer shell geladen wurde sollte das WindowsFormScript.ps1 ausgeführt werden.
Tezzla
Tezzla 22.09.2021 um 10:58:41 Uhr
Goto Top
Wie @DerWoWusste schon schrieb, macht das in deinem Kontext irgendwie keinen Sinn.

Du lädst ein Startscript und lässt es warten, bis sich jemand anmeldet, um dann weiter mit Systemrechten ein zweiten Script zu starten, was nicht im Benutzerkontext läuft? Warum?
149569
149569 22.09.2021 aktualisiert um 14:04:30 Uhr
Goto Top
Zitat von @joe2017:

Also in meinem Logon Script wird folgendes ausgeführt:
Computer Configuration - Policies - Windows Settings - Scripts (Startup/Shutdown) - Startup (Powershell Scripts)

Wie schon x mal gesagt wurde , das ist kein LOGON Skript was du da hast!! Das ist ein Startskript das im SYSTEM Kontext läuft und keinen Access zu einer GUI Session hat! Kann so also niemals funktionieren, da kannst du noch so lang auf den Explorer warten es wird niemals angezeigt werden weil es als SYSTEM läuft.

Login Scripts vs Start-Up Scripts

Guckst du auch
https://gpsearch.azurewebsites.net/#2308

Note: Starting with Windows Vista operating system, scripts that are configured to Run asynchronously are no longer visible on startup, whether this policy setting is enabled or not.
joe2017
joe2017 22.09.2021 um 14:07:16 Uhr
Goto Top
Ahhhh jetzt hab ich verstanden was Ihr mit "das ist kein Logon Script" meint!
Ich bin ja auch ein DEPP! *lach*

Gibt es eine Möglichkeit das Logon Script direkt bei Anmeldung auszuführen?
Wie gesagt über den Autostartoder "User Configuration - Policies - Administrative... - System - Logon - Run these programs at user logon" dauert das Ganze viel zu lange!
joe2017
joe2017 22.09.2021 aktualisiert um 14:17:04 Uhr
Goto Top
Ich habe leider in der falschen Struktur nachgesehen. Das Startup Script habe ich zusätzlich. Mein Logon Script wir natürlich unter dem User ausgeführt. Entschuldigung, mein Fehler!

Also sieht das aktuell wie folgt aus:
User Configuration - Policies - Windows Settings - Scripts (Logon/Logoff) - Logon (Powershell Scripts)
if ($env:COMPUTERNAME -match "xyz") {  
    Start-Process powershell.exe -ArgumentList "-file \\path\to\script_preload.ps1"  
}

Anschließend wie gehabt...
$started = $false
Do {
    $status = Get-Process explorer -ErrorAction SilentlyContinue
    If (!($status)) { Sleep 1 }
    Else { Start-Process powershell.exe -ArgumentList "-file \\path\to\WindowsFormScript.ps1" ; $started = $true }  
}
Until ( $started ) 
DerWoWusste
DerWoWusste 22.09.2021 um 14:32:25 Uhr
Goto Top
Den Hinweis auf die Ausführungsverzögerung hatte ich dir gegeben.
https://docs.microsoft.com/en-us/troubleshoot/windows-client/group-polic ....
joe2017
joe2017 22.09.2021 aktualisiert um 14:44:58 Uhr
Goto Top
Den Link hab ich leider übersehen. Aber vielen Dank für die Erinnerung.
Ein delay mit den normalen Logon Scripts habe ich eigentlich nicht.

Die Verzögerung die ich angesprochen habe bemerke ich lediglich wenn ich mein Script in den Autostartoder "User Configuration - Policies - Administrative... - System - Logon - Run these programs at user logon" packe.

Würde die GPO Einstellung von dir auch für diesen Fall helfen?
Configure Logon Script Delaysetting to Disabled in the Computer Configuration\Administrative Templates\System\Group Policy location

Eigentlich dürfte das etwas anderes bewirken.
DerWoWusste
DerWoWusste 22.09.2021 um 15:08:25 Uhr
Goto Top
Der Default sind 5 Minuten Verzögerung. Wenn du die Verzögerung nicht hast, hast du das bereits zuvor angepasst und wieder vergessen oder du nutzt kein Logonskript an der von mir angegebenen Stelle.

Für die anderen Autostarts wirkt das nicht, nein.
joe2017
joe2017 22.09.2021 um 15:51:25 Uhr
Goto Top
Ich habe es jetzt fast hinbekommen. Zumindest dachte ich das!

Ich habe mein Script direkt mit der GPO ausgeführt:
User Configuration - Policies - Windows Settings - Scripts (Logon/Logoff) - Logon (Powershell Scripts)

if ($env:COMPUTERNAME -match "xyz") {  
    Start-Process explorer.exe
    WindowsFormCode....
}

Mein Form wird auch direkt angezeigt. Ich kann auch eine Zeit lang arbeiten. Jedoch wird nach einigen Minuten alles beendet und ich sehe nur noch den Desktop und den offenen explorer.

Wahrscheinlich hat das Logon Script einen Timeout oder ähnliches.
Ich würde dieses natürlich gerne laufen lassen. Hat jemand eine Idee hierfür?
DerWoWusste
DerWoWusste 22.09.2021 um 15:54:57 Uhr
Goto Top
Logonskripte sind nicht für Interaktion gedacht, klar haben die einen timeout: https://admx.help/?Category=Windows_7_2008R2&Policy=Microsoft.Polici ...
joe2017
joe2017 22.09.2021 um 16:11:14 Uhr
Goto Top
Wie würdest du das Ganze lösen?
Hiermiet: User Configuration - Policies - Administrative... - System - Logon - Run these programs at user logon

Dann muss ich aber die Wartezeit in kauf nehmen bis das Script ausgeführt wird.
Das ist auch ehr unschön.
DerWoWusste
DerWoWusste 22.09.2021 um 18:45:48 Uhr
Goto Top
Du kannst doch den Timeout bis auf 32000 Sekunden anheben. Hatte ich verlinkt.