Saya memiliki persyaratan untuk menjalankan skrip batch setiap kali sistem dimatikan, tidak peduli apakah komputer terhubung ke jaringan atau tidak. (Seharusnya tidak masalah untuk pertanyaan itu, tetapi skrip yang dimaksud membersihkan antrian cetak mesin.
Namun, saya tidak bisa menjalankan skrip ini ketika PC sedang offline dari jaringan, ketika saya menggunakan metode ini di bawah.
Saya mungkin juga menambahkan bahwa PC tersebut menjalankan Windows 10 Pro x64 (versi 1809). Pengontrol domain menjalankan Windows Server 2008 R2, dan ini juga tempat saya menjalankan gpedit.msc
.
Apa yang telah saya lakukan sejauh ini:
- Membuat objek kebijakan grup direktori aktif dengan skrip shutdown mesin.
- Menambahkan skrip ke folder GPO di SYSVOL .
- Dikonfirmasi bahwa GPO ini memang diunduh ke hard disk workstation yang bersangkutan dan karenanya harus dapat diakses secara luring.
- Jalur yang ditentukan dalam GPO adalah relatif, tidak absolut.
Apa yang saya inginkan terjadi:
- Ketika PC dimatikan,
ClearPrintQueue.bat
skrip dijalankan terlepas dari apakah PC saat ini memiliki koneksi jaringan atau tidak.
Apa yang sebenarnya terjadi:
- Ketika PC dimatikan,
ClearPrintQueue.bat
skrip hanya dijalankan jika PC saat ini dapat mencapai berbagi SYSVOL melalui jaringan.
Detail:
Apa yang saya lakukan adalah membuat Objek Kebijakan Grup di domain dan menautkannya ke OU Uji yang berisi mesin yang dimaksud.
Saya mengedit GPO dan menavigasi ke Konfigurasi Komputer -> Kebijakan -> Pengaturan Windows -> Skrip (Startup / Shutdown) -> Shutdown
The Shutdown Properti yang sesuai di bawah ini:
Ketika mengklik pada Tampilkan File ... explorer terbuka untuk mengungkapkan folder\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown
Isi folder ini dan file ClearPrintQueue.bat adalah seperti di bawah ini:
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:\>
Saat menyelidiki PC lokal, saya dapat menemukan bahwa skrip tersebut memang disalin ke PC: toko GPO lokal:
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:\>
Investigasi ke scripts.ini
dan ClearPrintQueue.bat
pada disk lokal PC kami temukan:
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:\>
Yaitu komputer memiliki segala yang dibutuhkan untuk benar-benar menjalankan skrip shutdown tanpa menjangkau jaringan. Namun, saya telah mengamati bahwa skrip tampaknya tidak berjalan ketika koneksi jaringan hilang.
Penyelidikan lebih lanjut menggunakan paket capture dan WireShark lebih lanjut tampaknya membuktikan bahwa PC memang menarik skrip dari berbagi SYSVOL (mengapa! Ada di sana pada disk ...) Perangko waktu sesuai dengan ketika komputer sedang dimatikan .
Kemungkinan solusi:
Salah satu solusi yang mungkin belum saya uji adalah melibatkan secara manual menentukan path absolut dari skrip C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.bat
daripada hanya menentukan ClearPrintQueue.bat
sebagai path relatif. Tapi ini kelihatannya sangat tidak jelas, dan sepertinya itu tidak dimaksudkan untuk bekerja. Sebelum saya menempuh rute itu, saya ingin melihat apakah ada orang lain yang memiliki ide yang lebih baik.
Mengapa saya mencoba melakukan ini:
Saya memiliki pengguna ponsel yang suka mencetak secara tidak sengaja ke printer yang salah, dan mereka kemudian antri secara lokal di setiap stasiun kerja, dan kemudian ketika PC terhubung ke situs tempat printer itu berada, setumpuk kertas keluar dari printer. Perangkat lunak VPN dijalankan pada level "pengguna", dan dengan demikian perangkat lunak VPN mungkin tidak akan berjalan ketika tiba saatnya untuk dimatikan.
Saya mencoba mengurangi ini dengan membersihkan antrian cetak pada saat shutdown, sehingga pekerjaan cetak kuno tidak duduk dalam antrian selamanya.
start -> run -> gpedit.msc
?