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.
sumber
Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....
bukanStop-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.)Jawaban:
Jawaban atas pertanyaan lain juga menyelesaikan masalah saya.
Langkah-langkah yang saya lakukan adalah:
enable-psremoting
pada server di admin PowerShell promptSet-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI
pada server di admin PowerShell promptsc sdshow scmanager
di server di command prompt admin(A;;KA;;;SID_OF_USER_OR_SECURITY_GROUP)
ke SDDL sebelum bagian S :.sc sdset scmanager THE_MODIFIED_SDDL
punyaku terlihat seperti ini:sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;KA;;;S-1-X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
Start-Service
CmdLet sebagai gantiSet-Service
(Set-Service tidak berfungsi).Sepertinya sesuatu yang sederhana ternyata jalan, WAY lebih rumit daripada yang seharusnya ...
sumber