GPO:加载 explorer.exe 后运行 PowerShell 登录脚本

Mat*_*ert 7 powershell logon-scripts group-policy

我知道有GPO设置“计算机配置 => 管理。模板 => 系统 => 脚本 => 同步运行登录脚本”。但是,这可确保登录脚本在 Windows 资源管理器开始加载(启用时)之前运行。

我需要相反的东西。我想确保 explorer.exe 已成功加载并随后执行 PowerShell 登录脚本。这是由于我需要触发的应用程序的一些奇怪的依赖关系。

我尝试禁用根据描述应该允许同时运行文件资源管理器和脚本的设置。不幸的是,它没有(是的,我重新启动和 gpupdates ......)

所以我尝试在我的 PowerShell 登录脚本中添加一个名为 wait-for-explorer() 的函数。它会while循环休眠,直到 explorer.exe 运行。但是,这似乎不起作用。

解决这个问题的最好和最干净的方法是什么?是否有我忽略的 GPO 设置?

这是代码的样子:

Function Wait-For-Explorer
{   
    $process = 'explorer.exe'
    $waitTime = 1

    While ($owner.User -ne $env:USERNAME) 
    {   
        try 
        {     
            $owner = (Get-WmiObject -class win32_process | where { $_.ProcessName -eq $process }).GetOwner() | Select -Property User
        }
        catch
        {
            Write-Host "Zzzzz...."
            Start-Sleep -Seconds $waitTime
        }
    }

    Write-Host "Process ${process} is running..."
}
Run Code Online (Sandbox Code Playgroud)

更新

我找到了我的问题的答案以及为什么 Microsoft 没有提供这样的选项。原因是根据Technet文章How Core Group Policy Works组策略的处理是同步的,这意味着计算机组策略在出现登录对话框之前完成,用户组策略在shell激活之前完成并可供用户与之交互。这反过来意味着组策略引擎没有(直接)可能性在加载用户外壳后启动进程......

Mat*_*ert 5

我刚刚偶然发现了以下设置:

用户配置 => 策略 => 管理模板 => 系统 => 登录 => 在用户登录时运行这些程序

当从这里调用我的脚本时,一切正常。这(似乎)与 AD 用户对象中的“登录脚本”的行为方式相同。它等待文件资源管理器完成加载,然后执行脚本......任务完成!谢谢大家!