我知道邮政总局设置“计算机配置 => 管理模板 => 系统 => 脚本 => 同步运行登录脚本”。但是,这可确保登录脚本在 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..."
}
更新
我找到了问题的答案,以及为什么 Microsoft 没有提供这样的选项。原因是根据 Technet 文章核心组策略的工作原理,组策略的处理是同步的,这意味着计算机组策略在登录对话框出现之前完成,而用户组策略在 shell 处于活动状态并可供用户与其交互之前完成。这反过来意味着组策略引擎在用户 shell 加载后没有(直接)启动进程的可能性……
答案1
我刚刚偶然发现了以下设置:
用户配置 => 策略 => 管理模板 => 系统 => 登录 => 在用户登录时运行这些程序
从这里调用我的脚本时,一切都正常。这(似乎)与 AD 用户对象中的“登录脚本”的行为方式相同。它等待文件资源管理器完成加载,然后执行脚本……所以任务完成了!感谢所有人!
答案2
您是否尝试过将其作为计划任务运行,并以“用户登录”作为触发器?这可能会消除对此类功能的需求。
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.
答案3
如果你看看 MDT(http://technet.microsoft.com/en-us/windows/dn475741.aspx) 执行此操作时,它会将快捷方式放置在用户的“启动”文件夹中。这样,您几乎可以保证脚本不会运行,直到用户登录并显示桌面。如果您在 MDT 脚本文件夹中挖掘一下,您会找到用于创建这些快捷方式的现成脚本。