컴퓨터가 네트워크에 연결되어 있는지 여부에 관계없이 시스템을 종료 할 때마다 배치 스크립트를 실행해야합니다. (질문은 중요하지 않지만 문제의 스크립트는 기기의 인쇄 대기열을 지 웁니다.
그러나 아래 의이 방법을 사용할 때 PC가 네트워크에서 오프라인 상태 일 때이 스크립트를 실행할 수 없습니다.
또한 해당 PC에서 Windows 10 Pro x64 (버전 1809)를 실행하고 있다고 덧붙일 수도 있습니다. 도메인 컨트롤러는 Windows Server 2008 R2를 실행 중이며 여기에서도 실행 gpedit.msc
됩니다.
내가 지금까지 한 일 :
- 컴퓨터 종료 스크립트를 사용 하여 Active Directory 그룹 정책 개체 를 만들었습니다 .
- SYSVOL 의 GPO 폴더에 스크립트를 추가했습니다 .
- 이 GPO가 실제로 해당 워크 스테이션의 하드 디스크로 다운로드되어 오프라인에서 액세스 할 수 있는지 확인했습니다.
- GPO에 지정된 경로는 절대 경로가 아니라 상대 경로입니다.
내가하고 싶은 일 :
- PC가 종료되면 PC가
ClearPrintQueue.bat
현재 네트워크에 연결되어 있는지 여부에 관계없이 스크립트가 실행됩니다.
실제로 일어나는 일 :
- PC가 종료
ClearPrintQueue.bat
되면 PC가 현재 네트워크를 통해 SYSVOL 공유에 도달 할 수있는 경우에만 스크립트가 실행됩니다 .
세부:
내가 한 것은 도메인에서 그룹 정책 개체 를 만들고 해당 컴퓨터가 포함 된 테스트 OU에 연결하는 것입니다.
GPO를 편집하고 컴퓨터 구성 -> 정책 -> Windows 설정 -> 스크립트 (시작 / 종료) -> 종료로 이동했습니다.
종료 속성 아래 당과 같음 :
파일 표시 …를 클릭하면 탐색기가 열리고 폴더가 나타납니다.\\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 :의 로컬 GPO 저장소에 실제로 복사되어 있음을 알 수 있습니다.
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 공유에서 스크립트를 가져 오는 것을 입증하는 것으로 보입니다 (이유는 디스크에 있습니다 …) 타임 스탬프는 컴퓨터가 종료되었을 때와 일치합니다 .
가능한 해결 방법 :
내가 아직 테스트하지 않은 한 가지 가능한 해결 방법 은 상대 경로로 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 소프트웨어가 실행되지 않을 수 있습니다.
종료시 인쇄 대기열을 삭제하여 고대 인쇄 작업이 대기열에 영원히 저장되지 않도록하여이를 완화하려고합니다.
답변
의도적으로 설계된 것입니다. Microsoft는 컴퓨터가 오프라인 일 때 시작 / 종료 스크립트가 실행된다고 말하지 않았습니다.
찾은 로컬 캐시는 오프라인 처리를위한 것이 아니라 클라이언트가 도메인 컨트롤러를 압도하지 않도록하기위한 것입니다. 이 특정 지점에 대한 자세한 내용은 다음을 참조하십시오. 그룹 정책 핵심 프로토콜 : GPO 버전 캐시
또한 그룹 정책 스크립트 확장을 사용 하려면 클라이언트가 스크립트 소스의 유효성을 검사 할 수 있어야합니다. 다음 다이어그램에서 볼 수 있듯이 GP 서버 (도메인 컨트롤러)는 그룹 정책 스크립트 확장의 핵심입니다.
문제를 해결하려면 대신 다음을 시도해보십시오.
그룹 정책 기본 설정 ( Computer Configuration -> Preferences -> Control Panel -> Scheduled Tasks
)을 통해 예약 된 작업을 생성하고을 생성 하고 다음 New Scheduled Task (at Least Windows 7)
으로 실행되도록 작업을 구성한 System
후 다음 트리거를 추가하십시오 On disconnect from user session
.
그런 다음 다른 환경 설정 ( “예약 된 작업”대신 “파일”)을 작성하여 컴퓨터의 안전한 로컬 경로에 스크립트를 복사하십시오 (사용자는 권한 상승을 피하기 위해이 파일에 쓸 수 없어야합니다). 원하는 경우 다른 것을 사용하여 파일을 복사 할 수 있지만 예약 된 작업 환경 설정에서 파일을 참조하는 것을 잊지 마십시오.