워크 스테이션이 네트워크에 연결되어 있지 않으면 종료 스크립트가 실행되지 않습니다


8

컴퓨터가 네트워크에 연결되어 있는지 여부에 관계없이 시스템을 종료 할 때마다 배치 스크립트를 실행해야합니다. (질문은 중요하지 않지만 문제의 스크립트는 기기의 인쇄 대기열을 지 웁니다.

그러나 아래 의이 방법을 사용할 때 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 공유에서 스크립트를 가져 오는 것을 입증하는 것으로 보입니다 (이유는 디스크에 있습니다 ...) 타임 스탬프는 컴퓨터가 종료되었을 때와 일치합니다 .

종료시 스크립트가 디스크에서 풀다운되는 방법을 보여주는 Wireshark 패킷 캡처

가능한 해결 방법 :

내가 아직 테스트하지 않은 한 가지 가능한 해결 방법 은 상대 경로로 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 소프트웨어가 실행되지 않을 수 있습니다.

종료시 인쇄 대기열을 삭제하여 고대 인쇄 작업이 대기열에 영원히 저장되지 않도록하여이를 완화하려고합니다.


이 스크립트를 로컬 정책에 추가하면 어떻게됩니까? 예를 들어 start -> run -> gpedit.msc?
Lenniey

@Lenniey 감사합니다. 그러나 로컬 정책을 사용하는 것은 환경에서 실용적이지 않으므로이 시스템을 실행하려면 약 35 대의 컴퓨터가 필요합니다.
폰 Zweigbergk 당

답변:


9

의도적으로 설계된 것입니다. Microsoft는 컴퓨터가 오프라인 일 때 시작 / 종료 스크립트가 실행된다고 말하지 않았습니다.

찾은 로컬 캐시는 오프라인 처리를위한 것이 아니라 클라이언트가 도메인 컨트롤러를 압도하지 않도록하기위한 것입니다. 이 특정 지점에 대한 자세한 내용은 다음을 참조하십시오. 그룹 정책 핵심 프로토콜 : 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.

그런 다음 다른 환경 설정 ( "예약 된 작업"대신 "파일")을 작성하여 컴퓨터의 안전한 로컬 경로에 스크립트를 복사하십시오 (사용자는 권한 상승을 피하기 위해이 파일에 쓸 수 없어야합니다). 원하는 경우 다른 것을 사용하여 파일을 복사 할 수 있지만 예약 된 작업 환경 설정에서 파일을 참조하는 것을 잊지 마십시오.


3
예약 된 작업 일 필요는 없지만 종료 스크립트를 계속 사용할 수 있습니다. 스크립트는 GPO에 앉아 있지 않고 로컬 디스크에 있어야합니다.
Harry Johnston

2
링크에 감사드립니다. 그룹 정책이 왜 그 역할을하는지 설명합니다. 내가 이해 한 바에 따르면 GPO 폴더 안에 스크립트를 넣을 이유가 없다는 것을 알 수 있습니다. 외부에두면 불필요하게 각 워크 스테이션에 복사되지 않으며 내부에두면 아무런 이점이 없습니다. GPO에서 "파일"을 사용하여 네트워크 공유에서 컴퓨터로 스크립트를 명시 적으로 복사 한 다음 절대 파일 경로를 사용하여 스크립트를 실행했습니다. 예정된 작업을 사용하지 않았습니다. 보안에 대한 팁도 감사합니다.
폰 Zweigbergk 당
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.