Sebelum saya jatuh, saya tahu cara menjadwalkan tugas, memulai kembali layanan dengan PowerShell atau memberikan akun non-admin hak istimewa untuk memulai kembali layanan. Bukan itu masalahnya. Namun masalahnya adalah kombinasi dari ketiga tugas ini digabungkan.
Saya memiliki layanan windows yang perlu memproses file pada folder jaringan. Karena itu logon dengan "akun layanan" yang sebenarnya hanya akun domain biasa. Akun domain ini bukan administrator tetapi memiliki hak akses ke folder tersebut. Layanan berjalan dengan baik dan melakukan pekerjaannya.
Namun, kadang-kadang ada kesalahan dalam salah satu file yang mencegah file lain dari diproses. Biasanya butuh beberapa saat bagi seseorang untuk memperhatikan dan ada beberapa simpanan.
Jadi, saya membuat skrip pemantauan di PowerShell yang polling folder jaringan untuk file-file yang salah. Jika ditemukan, file dipindahkan ke folder sementara untuk ditinjau dan layanan perlu dimulai ulang.
Saya memberikan hak istimewa akun layanan melalui kebijakan grup untuk memulai dan menghentikan layanan.
Ketika saya masuk ke server dengan akun layanan, saya dapat memulai kembali layanan secara manual menggunakan Layanan MMC. Saya juga dapat menjalankan skrip PowerShell dan melakukan apa yang seharusnya dilakukan: polling folder, pindahkan file dan restart layanan. Bagus!
Pada fase berikutnya, saya membuat tugas terjadwal yang berjalan setiap 10 menit. Tugas menggunakan akun layanan yang sama dengan layanan untuk menjalankan skrip PowerShell. Kotak "eksekusi dengan hak istimewa tertinggi" dicentang. Seperti yang saya katakan, skrip powershell membutuhkan akses ke drive jaringan, jadi saya tidak dapat menjalankannya sebagai admin server lokal dan saya tidak ingin menggunakan kredensial admin domain untuk tugas kasar seperti ini. (Saya mencoba menerapkan prinsip privilege paling tidak sebanyak yang saya bisa.)
Saya memberi hak layanan "masuk sebagai pekerjaan batch" pada server akun menggunakan MMC Kebijakan Keamanan Lokal.
Sekarang untuk bagian yang saya tidak tahu: Pada waktu yang dijadwalkan tugas yang dijadwalkan selesai dengan sukses dan skrip PowerShell sedang dieksekusi. Script mengumpulkan folder dan file kesalahan dipindahkan. Satu-satunya hal yang tidak berhasil adalah me-restart layanan ...?! Sekali lagi, menjalankan skrip secara manual karena pengguna yang sama bekerja dengan sempurna.
Saya tidak melihat banyak di penampil acara, tetapi pencatatan pada skrip saya menyatakan kesalahan ini:
TerminatingError (Stop-Service): "Tidak dapat membuka Service Control Manager di komputer '.'. Operasi ini mungkin memerlukan hak istimewa lainnya."
Perintah yang saya gunakan untuk me-restart layanan adalah:
Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])
(Saya menggunakan windows server 2012 R2 dan PowerShell versi 4 pada 2008 R2 Domain.)
Pembaruan: Saya sama-sama mencoba mengatur izin layanan untuk pengguna menggunakan subinacl (seperti yang dijelaskan di sini ) dan mengatur string SDDL secara manual (seperti dijelaskan di sini ), sehingga bendera kontrol saya terlihat seperti ini (A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX). Saya juga mencoba mengatur hak istimewa pada layanan untuk Kontrol Penuh di GPO. Tak satu pun dari ini menyelesaikan masalah. Itu harus saya masalah dengan hak istimewa di suatu tempat yang masih saya abaikan, karena ketika saya menjadwalkan tugas dengan akun domain yang merupakan admin lokal di server, itu berfungsi dengan baik.
Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....
bukan Stop-Service
CmdLet? Stop-Service dan Start-Service tampaknya tidak dapat melakukan remote berdasarkan jawaban ini: Tidak dapat menggunakan Get-Service –ComputerName di komputer jarak jauh dan pesan kesalahan Anda mungkin terkait dengan mencoba menyambung ke localhost "remote". ' (<== itu titik di sana.)