Я знаю, что есть GPO установка «Конфигурация компьютера => Админ. Шаблоны => Система => Скрипты => Запускать сценарии входа синхронно». Это, однако, гарантирует, что сценарии входа в систему будут выполняться до того, как Windows Explorer начнет загрузку (если он включен).
Мне нужно обратное. Я хочу убедиться, что explorer.exe успешно загрузился, и после этого выполнить сценарий входа в PowerShell. Это связано с некоторыми излишними зависимостями приложения, которое мне нужно запустить.
Я попытался отключить настройку, которая, согласно описанию, должна позволять одновременно запускать файловый менеджер и скрипт. К сожалению, нет (да, перезагружал и gpupdates ...)
Поэтому я попытался добавить функцию под названием wait-for-explorer () в свой сценарий входа в PowerShell. Он спит в 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 Как работает основная групповая политика, обработка групповой политики является синхронной, что означает, что групповая политика компьютера завершается до появления диалогового окна входа в систему, а групповая политика пользователя завершается до того, как оболочка станет активной и доступна для взаимодействия пользователя с ней. Это, в свою очередь, означает, что у механизма групповой политики нет (прямой) возможности запустить процесс после загрузки оболочки пользователя ...
Я только что наткнулся на следующую настройку:
Конфигурация пользователя => Политики => Административные шаблоны => Система => Вход в систему => Запускать эти программы при входе пользователя в систему
При вызове моих скриптов отсюда все работает. Это (кажется) действует так же, как «Сценарий входа» в пользовательском объекте AD. Он ждет, пока File Explorer закончит загрузку, а затем выполняет сценарии ... Итак, миссия выполнена! Спасибо всем!
Вы пробовали запускать его как запланированную задачу с триггером «входа пользователя в систему»? Это могло бы устранить необходимость в такой функции.
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) делает это, он помещает ярлык в папку "автозагрузки" пользователя. Таким образом, вам практически гарантировано, что сценарий не запустится, пока пользователь не войдет в систему и не появится рабочий стол. Если немного покопаться в папке сценариев MDT, вы найдете готовые сценарии для создания этих ярлыков.