GPO:在加载explorer.exe后运行PowerShelllogin脚本

我知道有GPO设置“Computer Configuration => Admin。Templates => System => Scripts =>同步运行login脚本”。 但是,这确保login脚本在Windows资源pipe理器开始加载之前运行(启用时)。

我需要相反的东西。 我想确保explorer.exe已经成功加载,然后执行PowerShelllogin脚本。 这是由于我需要触发的一些应用程序的依赖关系。

我试过禁用根据描述的设置应该允许同时运行文件资源pipe理器和脚本。 不幸的是,它不(是的,我做了重启和gpupdates …)

所以我试图在我的PowerShelllogin脚本中添加一个名为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..." } 

更新

我find了我的问题的答案,为什么没有这样的select由微软提供。 原因是根据Technet文章“核心组策略如何工作”组策略的处理是同步的,这意味着计算机组策略在提交login对话框之前完成,并且在shell激活之前完成用户组策略并可供用户与之交互。 这又意味着组策略引擎没有(直接的)可能性在加载用户shell后启动进程…

你有没有尝试运行它作为一个“用户login”触发器的计划任务? 这可能不需要这样的function。

 SCHTASKS /Create [/S system [/U username [/P [password]]]] [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day] [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime] [/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]] [/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F] Description: Enables an administrator to create scheduled tasks on a local or remote system. Parameter List: <...many switches delted...> /SC schedule Specifies the schedule frequency. Valid schedule types: MINUTE, HOURLY, DAILY, WEEKLY, MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT. 

在这里输入图像说明

如果你看看MDT( http://technet.microsoft.com/en-us/windows/dn475741.aspx )是如何做到这一点的话,它就会把它作为用户“启动”文件夹中的快捷方式。 这样,你几乎可以保证脚本不会运行,直到用户login并显示桌面。 如果您在MDT脚本文件夹中挖掘了一下,您会发现用于创build这些快捷方式的现成脚本。

我只是偶然发现了以下设置:

用户configuration=>策略=>pipe理模板=>系统=>login=>在用户login时运行这些程序

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