Назад | Перейти на главную страницу

GPO: запускать сценарий входа PowerShell после загрузки explorer.exe

Я знаю, что есть 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, вы найдете готовые сценарии для создания этих ярлыков.