Kịch bản tắt máy không chạy nếu máy trạm không được kết nối với mạng


8

Tôi có một yêu cầu để chạy một tập lệnh bó mỗi lần tắt hệ thống, bất kể máy tính có được kết nối với mạng hay không. (Không quan trọng đối với câu hỏi, nhưng tập lệnh trong câu hỏi sẽ xóa hàng đợi in của máy.

Tuy nhiên, tôi không thể chạy tập lệnh này khi PC ngoại tuyến khỏi mạng, khi tôi sử dụng phương pháp này bên dưới.

Tôi cũng có thể thêm rằng PC đang được đề cập đang chạy Windows 10 Pro x64 (phiên bản 1809). Bộ điều khiển miền đang chạy Windows Server 2008 R2 và đây cũng là nơi tôi đã chạy gpedit.msc.

Những gì tôi đã làm cho đến nay:

  • Tạo Đối tượng chính sách nhóm Active Directory với tập lệnh tắt máy.
  • Đã thêm tập lệnh vào thư mục GPO trên SYSVOL .
  • Xác nhận rằng GPO này thực sự được tải xuống đĩa cứng của máy trạm đang được đề cập và do đó nên có thể truy cập ngoại tuyến.
  • Các đường dẫn được chỉ định trong GPO là tương đối, không tuyệt đối.

Điều tôi muốn xảy ra:

  • Khi PC bị tắt, ClearPrintQueue.battập lệnh được chạy bất kể PC hiện có kết nối mạng hay không.

Điều gì thực sự xảy ra:

  • Khi PC bị tắt, ClearPrintQueue.battập lệnh chỉ chạy nếu PC hiện có thể đạt được chia sẻ SYSVOL qua mạng.

Chi tiết:

Những gì tôi đã làm là tạo Đối tượng chính sách nhóm trong miền và liên kết nó với OU thử nghiệm có chứa máy đang được đề cập đến.

Tôi đã chỉnh sửa GPO và điều hướng đến Cấu hình máy tính -> Chính sách -> Cài đặt Windows -> Tập lệnh (Khởi động / Tắt máy) -> Tắt máy

Các thuộc tính tắt máy như dưới đây:

Thuộc tính tắt

Khi nhấp vào Show Files ... trình thám hiểm mở ra để hiển thị thư mục\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown

Nội dung của thư mục này và tệp ClearPrintQueue.bat như sau:

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:\>

Khi điều tra một PC cục bộ, tôi có thể thấy rằng tập lệnh thực sự được sao chép vào cửa hàng GPO cục bộ của PC: s:

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:\>

Điều tra vào scripts.iniClearPrintQueue.battrên đĩa cục bộ của máy tính, chúng ta thấy:

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:\>

Tức là máy tính có mọi thứ nó cần để thực sự chạy tập lệnh tắt mà không cần truy cập mạng. Tuy nhiên, tôi đã quan sát thấy rằng tập lệnh dường như không chạy khi thiếu kết nối mạng.

Nghiên cứu sâu hơn bằng cách sử dụng gói chụp và WireShark dường như chứng minh rằng PC thực tế đã kéo tập lệnh xuống khỏi chia sẻ SYSVOL (tại sao! Nó ở ngay trên đĩa ...) Dấu thời gian tương ứng với khi máy tính bị tắt .

Chụp gói Wireshark cho thấy cách tập lệnh được kéo xuống từ đĩa khi tắt máy

Cách giải quyết có thể:

Một cách giải quyết khác có thể mà tôi chưa thử nghiệm liên quan đến việc chỉ định thủ công đường dẫn tuyệt đối của tập lệnh C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.batthay vì chỉ xác định ClearPrintQueue.batlà đường dẫn tương đối. Mặc dù điều này có vẻ rất khó khăn và dường như nó không hoạt động như thế nào. Trước khi tôi đi xuống tuyến đường đó, tôi muốn xem liệu có ai có ý tưởng hay hơn không.

Tại sao tôi thậm chí đang cố gắng làm điều này:

Tôi có những người dùng di động thích vô tình in sai máy in và những người này sau đó được xếp hàng cục bộ trên mỗi máy trạm và sau đó khi PC được kết nối với trang web có máy in đó, một tờ giấy ra khỏi máy in. Phần mềm VPN được chạy ở cấp độ "người dùng" và do đó, phần mềm VPN có thể không chạy khi đến lúc tắt máy.

Tôi đang cố gắng giảm thiểu điều này bằng cách xóa hàng đợi in khi tắt máy, để các công việc in cổ không ngồi trong hàng đợi mãi mãi.


Điều gì nếu bạn thêm tập lệnh này vào các chính sách địa phương ? Ví dụ start -> run -> gpedit.msc?
Lenniey

@Lenniey Cảm ơn bạn, nhưng sử dụng các chính sách địa phương không thực tế trong môi trường của tôi, tôi có khoảng 35 máy tôi cần để chạy.
Per von Zweigbergk

Câu trả lời:


9

Đó là do thiết kế. Microsoft không bao giờ nói rằng các kịch bản khởi động / tắt máy sẽ được thực thi khi máy tính ngoại tuyến.

Bộ đệm cục bộ mà bạn tìm thấy không có ở đó để xử lý ngoại tuyến, nhưng để tránh việc máy khách lấn át bộ điều khiển miền. Bạn có thể tìm thêm chi tiết về điểm đặc biệt này tại đây: Giao thức lõi chính sách nhóm: Bộ nhớ cache của phiên bản GPO

Ngoài ra, Phần mở rộng tập lệnh chính sách nhóm yêu cầu khách hàng phải có khả năng xác thực nguồn của tập lệnh. Và như bạn có thể thấy trên sơ đồ sau, Máy chủ GP (Bộ điều khiển miền) là cốt lõi của Tiện ích mở rộng tập lệnh chính sách nhóm:

https://docs.microsoft.com/en-us/openspecs/windows_prot Protocol / ms-gpscr / ms-gpscr_files / image001.png

Để giải quyết vấn đề của bạn, tôi khuyên bạn nên thử điều này thay vào đó:

Tạo một tác vụ theo lịch trình thông qua các tùy chọn chính sách nhóm ( Computer Configuration -> Preferences -> Control Panel -> Scheduled Tasks) và tạo một New Scheduled Task (at Least Windows 7), định cấu hình tác vụ để chạy dưới dạng System, thêm trình kích hoạt sau : On disconnect from user session.

Sau đó, tạo Tùy chọn khác ("Tệp" thay vì "Tác vụ theo lịch trình") để sao chép tập lệnh của bạn trong đường dẫn cục bộ được bảo mật trên máy tính (người dùng không thể ghi vào tệp này để tránh leo thang đặc quyền). Bạn có thể sử dụng một cái gì đó khác để sao chép tệp nếu bạn muốn, nhưng đừng quên tham chiếu nó trong Tùy chọn tác vụ theo lịch trình.


3
Nó không phải là một tác vụ theo lịch trình, bạn vẫn có thể sử dụng tập lệnh tắt máy, tập lệnh chỉ cần nằm trên đĩa cục bộ chứ không phải ngồi trong GPO.
Harry Johnston

2
Cảm ơn bạn đã liên kết, họ thực sự làm sáng tỏ lý do tại sao Chính sách nhóm làm những gì nó làm. Theo hiểu biết của tôi, điều này cho tôi biết rằng không có lý do chính đáng nào để đặt tập lệnh bên trong thư mục GPO. Đặt nó bên ngoài ngăn chặn nó được sao chép vào mỗi máy trạm một cách không cần thiết, và đặt nó bên trong không có lợi ích. Tôi đã kết thúc bằng cách sử dụng "Tệp" trong GPO để sao chép rõ ràng tập lệnh vào máy từ chia sẻ mạng và sau đó sử dụng đường dẫn tệp tuyệt đối để thực thi. Tôi đã không kết thúc bằng cách sử dụng một nhiệm vụ theo lịch trình. Cảm ơn các mẹo về bảo mật cũng.
Per von Zweigbergk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.