web-dev-qa-db-ja.com

GPO:Explorer.exeが読み込まれた後にPowerShellログオンスクリプトを実行する

[〜#〜] gpo [〜#〜] 設定 "コンピュータの構成=>管理者テンプレート=>システム=>スクリプト=>ログオンスクリプトを同期的に実行する"があることを知っています。ただし、これにより、Windows Explorerがロードを開始する前にログオンスクリプトが確実に実行されます(有効な場合)。

反対のことが必要です。 Explorer.exeが正常に読み込まれたことを確認し、後でPowerShellログオンスクリプトを実行します。これは、トリガーする必要があるアプリケーションのいくつかの奇妙な依存関係が原因です。

説明に従って、ファイルエクスプローラーとスクリプトを同時に実行できるようにする設定を無効にしてみました。残念ながら、そうではありません(はい、私は再起動とgpupdatesを行いました...)

そこで、PowerShellログオンスクリプトにwait-for-Explorer()という関数を追加しようとしました。 Explorer.exeが実行されるまで、whileループでスリープします。ただし、これは正しく機能しないようです。

これを解決する最善かつ最もクリーンな方法は何ですか? 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..."
}

更新

私の質問に対する答えと、マイクロソフトが提供するそのようなオプションがない理由を見つけました。その理由は、Technetの記事コアグループポリシーのしくみによると、グループポリシーの処理は同期的であるため、つまりそのコンピューターのグループポリシーは、ログオンダイアログボックスが表示される前に完了し、ユーザーのグループポリシーは、シェルがアクティブになり、ユーザーがシェルと対話できるようになる前に完了します。これは、ユーザーシェルが読み込まれた後にグループポリシーエンジンがプロセスを開始する(直接)可能性がないことを意味します...

6
Matze

私は次の設定を偶然見つけました:

ユーザーの構成=>ポリシー=>管理用テンプレート=>システム=>ログオン=>ユーザーのログオン時にこれらのプログラムを実行する

ここからスクリプトを呼び出すと、すべてが機能します。これは、ADユーザーオブジェクト内の「ログオンスクリプト」と同じように動作します(ようです)。ファイルエクスプローラーの読み込みが完了するのを待機し、その後スクリプトを実行します。ありがとうございます!

2
Matze

「ユーザーログオン」をトリガーとして、スケジュールされたタスクとして実行してみましたか?これにより、そのような機能が不要になる場合があります。

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.

enter image description here

2
Clayton

MDT( http://technet.Microsoft.com/en-us/windows/dn475741.aspx )がこれをどのように実行するかを見ると、ユーザーの「スタートアップ」フォルダーにショートカットとして配置されます。これにより、ユーザーがログオンしてデスクトップが表示されるまでスクリプトが実行されないことがほぼ保証されます。 MDTスクリプトフォルダを少し掘り下げると、これらのショートカットを作成するための既成のスクリプトが見つかります。

1
Trondh