web-dev-qa-db-ja.com

ワークステーションがネットワークに接続されていない場合、シャットダウンスクリプトは実行されません

コンピューターがネットワークに接続されているかどうかに関係なく、システムがシャットダウンされるたびにバッチスクリプトを実行する必要があります。 (問題にはなりませんが、問題のスクリプトはマシンの印刷キューをクリアします。

ただし、以下の方法を使用すると、PCがネットワークからオフラインのときにこのスクリプトを実行できません。

また、問題のPCがWindows 10 Pro x64(バージョン1809)を実行していることも付け加えておきます。ドメインコントローラーはWindows Server 2008 R2を実行しており、ここでもgpedit.mscを実行しています。

これまでに行ったこと:

  • マシンシャットダウンスクリプトを使用してActive DirectoryGroup Policy Objectを作成しました。
  • スクリプトをGPO[〜#〜] sysvol [〜#〜]のフォルダーに追加しました。
  • このGPOは実際に問題のワークステーションのハードディスクにダウンロードされているため、オフラインでアクセスできるはずです。
  • GPOで指定されているパスは絶対パスではなく相対パスです。

私が起こりたいこと:

  • PCがシャットダウンすると、PCが現在ネットワークに接続しているかどうかに関係なく、ClearPrintQueue.batスクリプトが実行されます。

実際に何が起こるか:

  • PCがシャットダウンされると、ClearPrintQueue.batスクリプトは、PCが現在[〜#〜] sysvol [〜#〜]共有に到達できる場合にのみ実行されます。通信網。

詳細:

私が行ったことは、ドメイン内にGroup Policy Objectを作成し、問題のマシンを含むTest OUにリンクすることです。

GPOを編集してComputer Configuration->Policies->Windows設定->スクリプト(スタートアップ/シャットダウン)->シャットダウン

以下のようにShutdown Properties

Shutdown Properties

Show Files ...をクリックすると、エクスプローラーが開き、フォルダー\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdownが表示されます。

このフォルダーとClearPrintQueue.batファイルの内容は次のとおりです。

PS C:\> Get-ChildItem "\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown"


    Directory: \\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-04-23     15:00             71 ClearPrintQueue.bat


PS C:\> Get-Content "\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.bat"
net stop spooler
del %systemroot%\System32\spool\printers\* /Q /F /S
PS C:\>

ローカルPCを調査すると、スクリプトが実際にPCにコピーされていることがわかります。slocal GPO store:

PS C:\> Get-ChildItem -Recurse -Force -File "C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}"  


    Directory: C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}                            


Mode                LastWriteTime         Length Name                           
----                -------------         ------ ----                           
-a----       2019-04-23     15:00             59 gpt.ini                        


    Directory: C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts            


Mode                LastWriteTime         Length Name                           
----                -------------         ------ ----                           
-a-h--       2019-04-23     15:00            118 scripts.ini                    


    Directory: C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown   


Mode                LastWriteTime         Length Name                           
----                -------------         ------ ----                           
-a----       2019-04-23     15:00             71 ClearPrintQueue.bat            


PS C:\>

PCのローカルディスク上のscripts.iniおよびClearPrintQueue.batを調査します。

PS C:\> Get-Content "C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\scripts.ini"                                                                              

[Shutdown]                                                                      
0CmdLine=ClearPrintQueue.bat                                                    
0Parameters=                                                                    
PS C:\> Get-Content "C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.bat"                                                             
net stop spooler                                                                
del %systemroot%\System32\spool\printers\* /Q /F /S                             
PS C:\>

つまりコンピュータには、ネットワークに手を伸ばさずにシャットダウンスクリプトを実際に実行するために必要なものがすべて揃っています。 しかし、ネットワーク接続がない場合、スクリプトが実行されていないようです

パケットキャプチャとWireSharkを使用してさらに調査すると、PCが実際にスクリプトをSYSVOL共有からプルダウンしていることが証明されているようです(理由!ディスクにある...)。タイムスタンプは、コンピュータがシャットダウンされていた時刻に対応しています。

Wireshark packet capture showing how the script is pulled down from disk at shutdown time

可能な回避策:

まだテストしていない回避策の1つとして、C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.batを相対パスとして指定するだけでなく、スクリプトの絶対パスClearPrintQueue.batを手動で指定する方法があります。ただし、これは非常にハッキリしているように見え、動作するように「意味がある」ようには見えません。そのルートに進む前に、他の誰かがもっと良いアイデアを持っているかどうかを確認したいです。

なぜこれをやろうとしているのか:

私は誤って間違ったプリンターに印刷したいモバイルユーザーがいて、それらは各ワークステーションのローカルでキューに入れられ、その後PCがそのプリンターのあるサイトに接続されると、大量の紙がプリンターから出てきます。 VPNソフトウェアは「ユーザー」レベルで実行されるため、シャットダウンのときにVPNソフトウェアが実行されていない可能性があります。

シャットダウン時に印刷キューをクリアすることでこれを軽減し、古い印刷ジョブがキューに永遠に留まらないようにしています。

8

仕様によるものです。マイクロソフトは、コンピューターがオフラインのときに起動/シャットダウンスクリプトが実行されるとは決して言っていません。

見つけたローカルキャッシュはオフライン処理用ではありませんが、クライアントがドメインコントローラーに負荷をかけないようにするためです。この特定のポイントの詳細については、こちらをご覧ください。 グループポリシーコアプロトコル:GPOバージョン)のキャッシュ

さらに、 グループポリシースクリプト拡張 では、クライアントがスクリプトのソースを検証できる必要があります。次の図に示すように、GPサーバー(ドメインコントローラー)はグループポリシースクリプト拡張機能の中核です。

https://docs.Microsoft.com/en-us/openspecs/windows_protocols/ms-gpscr/ms-gpscr_files/image001.png

あなたの問題を解決するために、代わりにこれを試すことをお勧めします:

グループポリシーの基本設定(_Computer Configuration -> Preferences -> Control Panel -> Scheduled Tasks_)でスケジュールされたタスクを作成し、New Scheduled Task (at Least Windows 7)を作成して、Systemとして実行するようにタスクを構成し、次のトリガーを追加します:_On disconnect from user session_。

次に、別の設定(「スケジュールされたタスク」ではなく「ファイル」)を作成して、スクリプトをコンピューターの安全なローカルパスにコピーします(特権の昇格を避けるために、ユーザーがこのファイルに書き込むことはできません)。必要に応じて、他の何かを使用してファイルをコピーできますが、スケジュールされたタスク設定で参照することを忘れないでください。

9
Swisstone