Mengelola Layanan Windows dengan PowerShell

Pada Windows, Anda dapat mengelola layanan tidak hanya dari konsol grafis services.msc atau utilitas baris perintah Sc.exe (awalnya termasuk dalam Resource Kit), tetapi juga menggunakan PowerShell. Pada artikel ini, kita melihat berbagai skenario untuk mengelola layanan Windows menggunakan PowerShell..

Konten:

  • Cmdlet PowerShell dasar untuk mengelola layanan Windows
  • Hentikan, mulai, jeda, dan mulai ulang layanan dari PowerShell
  • Set-Service - ubah pengaturan layanan Windows
  • Membuat dan Menghapus Layanan Windows dengan PowerShell
  • Ubah akun untuk memulai layanan

Cmdlet PowerShell dasar untuk mengelola layanan Windows

Ada delapan cmdlet Layanan inti yang dirancang untuk melihat status dan mengelola layanan Windows.

Untuk mendapatkan seluruh daftar cmdlet Layanan, masukkan perintah:

Dapatkan-Bantuan \ * - Layanan

  • Dapatkan layanan - memungkinkan Anda untuk mendapatkan layanan di komputer lokal atau jarak jauh, mulai dan berhenti;
  • Layanan baru - buat layanan. Menciptakan entri baru untuk layanan Windows dalam database registri dan layanan;
  • Mulai kembali layanan - mulai ulang layanan. Mengirim pesan tentang memulai kembali layanan melalui Pengontrol Layanan Windows
  • Lanjutkan layanan - melanjutkan layanan. Mengirim pesan resume ke Windows Service Manager;
  • Setel layanan - Ubah pengaturan layanan lokal atau jarak jauh, termasuk status, deskripsi, nama tampilan, dan mode startup. Cmdlet ini juga dapat digunakan untuk memulai, menghentikan, atau menjeda layanan;
  • Mulai layanan - mulai layanan;
  • Hentikan layanan - menghentikan layanan (mengirim pesan berhenti ke Windows Service Manager);
  • Tangguhkan layanan jeda layanan. Layanan yang ditangguhkan masih berjalan, tetapi berhenti bekerja sampai layanan dilanjutkan, misalnya, menggunakan cmdlet Lanjutkan-Layanan.

Untuk deskripsi terperinci dan contoh-contoh menggunakan cmdlet tertentu, gunakan Dapatkan bantuan:

Get-Help Start-Service

Dapatkan-Layanan: dapatkan daftar layanan dan statusnya

Anda dapat menggunakan cmdlet untuk mengambil daftar dan status (Menjalankan / Berhenti) dari layanan di komputer lokal atau jarak jauh. Dapatkan layanan. Opsi -Name memungkinkan pemilihan berdasarkan nama layanan. Nama layanan dapat ditentukan menggunakan karakter wildcard *.

Jika Anda tidak tahu nama pasti layanan, Anda dapat mencari layanan berdasarkan nama tampilan menggunakan parameter -Displayname. Anda dapat menggunakan daftar nilai dan wildcard.

.

Cmdlet Dapatkan layanan dapat digunakan untuk mendapatkan status layanan pada komputer jarak jauh dengan menentukan parameter -Nama pengguna. Anda dapat menanyakan status layanan segera di banyak komputer jarak jauh, nama mereka harus terdaftar dengan koma. Misalnya, perintah berikut mendapat status layanan Pengumpul Informasi pada komputer jarak jauh RM1 dan RM2.

Dapatkan-Service spooler -ComputerName RM1, RM2

Nama Status DisplayName ------ ---- ----------- Running spooler Cetak Spooler Berhenti spooler Cetak Spooler

Untuk menampilkan semua properti layanan, cmdlet Select-Object akan memungkinkan:

Dapatkan-Layanan spooler | Pilih-Objek *

Cmdlet Pilih-objek akan menampilkan properti layanan tertentu. Misalnya, kita perlu menampilkan nama, status, dan fitur yang tersedia dari layanan Pengumpul Informasi:

Dapatkan-Layanan Spooler | Pilih DisplayName, Status, ServiceName, Can *

Cmdlet Dapatkan layanan memiliki dua parameter yang memungkinkan Anda untuk mendapatkan dependensi layanan:

  • Parameter -DependentServices memungkinkan Anda menampilkan layanan yang bergantung pada layanan ini;
  • Parameter -Layanan yang Diperlukan memungkinkan Anda menampilkan layanan tempat layanan ini bergantung.

Perintah berikut menampilkan layanan yang diperlukan untuk memulai layanan Pengumpul Informasi:

Dapatkan-Layanan -Nama Pengumpul Informasi -RequiredServices

Perintah berikut menampilkan layanan yang bergantung pada layanan Pengumpul Informasi:

Dapatkan-Layanan -Nama Pengumpul Informasi -DependentServices

Jika Anda perlu menemukan layanan dengan keadaan atau pengaturan tertentu, gunakan cmdlet Di mana-objek. Misalnya, kami mendapatkan daftar layanan yang sedang berjalan dengan status Berlari:

Dapatkan Layanan | Where-Object $ _. Status -eq 'running'

Untuk menampilkan layanan dengan Manual jenis startup, jalankan perintah

Dapatkan Layanan | Where-Object $ _. Starttype -eq 'Manual'

Periksa apakah sistem memiliki layanan yang ditentukan:

if (Dapatkan-Servis "ServiceTest" -ErrorAction SilentlyContinue)

Host-host "ServiceTest ada"

Hentikan, mulai, jeda, dan mulai ulang layanan dari PowerShell

Anda dapat menghentikan layanan menggunakan cmdlet Hentikan layanan. Untuk menghentikan layanan cetak, jalankan perintah:

Stop-Service -Name spooler

Cmdlet Stop-Service tidak menampilkan data apa pun setelah eksekusi. Untuk melihat hasil dari perintah, gunakan parameter -PassThru.

Harap dicatat bahwa tidak setiap layanan dapat dihentikan. Jika ada layanan dependen, maka dapatkan kesalahan

Tidak dapat menghentikan layanan karena memiliki layanan yang tergantung. Itu hanya dapat dihentikan jika flag kekuatan ditetapkan.

Untuk memaksa berhenti, gunakan parameter -Paksaan. Anda harus ingat bahwa semua layanan dependen juga akan berhenti:

Stop-Service samss -Paksa -Passthru

Perintah berikut akan menghentikan layanan yang terdaftar (bit, spooler) dengan status "Berjalan":

bit layanan get, spooler | di mana $ _. status -eq 'running' | stop-service -passthru

Kadang-kadang layanan membeku dalam status Berhenti dan prosesnya harus dihentikan secara paksa.

Cmdlet Mulai layanan layanan mulai dihentikan:

Start-Service -Name spooler -PassThru

Layanan tidak akan mulai jika ada layanan yang berhenti bergantung. Untuk menemukan dan mengaktifkannya:

get-service samss | Foreach start-service $ _. Name -passthru; start-service $ _. DependentServices -passthru

Cmdlet Tangguhkan layanan dapat menangguhkan layanan yang memungkinkan penangguhan sementara dan dilanjutkan kembali. Gunakan cmdlet untuk mendapatkan informasi tentang kemampuan untuk sementara waktu menangguhkan layanan tertentu. Dapatkan layanan dengan properti "CanPauseAndContinue".

Dapatkan-Layanan samss | Format-nama daftar, dapat berhenti dan melanjutkan

Untuk menampilkan daftar semua layanan yang mungkin dijeda, masukkan perintah:

Dapatkan Layanan | Where-Object $ _. Canpauseandcontinue -eq "True"

Tangguhkan layanan SQLBrowser:

Tangguhkan-Layanan -Nama SQLBrowser

Untuk melanjutkan layanan yang ditangguhkan, gunakan cmdlet Lanjutkan layanan:

Lanjutkan-Layanan -Nama SQLBrowser

Perintah berikut melanjutkan semua layanan yang dijeda:

dapatkan layanan | where-object $ _. Status -eq "Dijeda" | melanjutkan layanan

Cmdlet Mulai kembali layanan restart layanan:

Restart-Layanan -No spooler

Perintah ini memulai semua layanan jaringan komputer yang dihentikan:

dapatkan-layanan net * | where-object $ _. Status -eq "Stopped" | restart layanan

Parameter -Nama pengguna cmdlet ini hilang, tetapi mereka dapat dijalankan pada komputer jarak jauh menggunakan cmdlet Minta perintah atau melalui pipa:

Misalnya, untuk memulai kembali antrian cetak pada komputer jarak jauh RM1, jalankan perintah:
Dapatkan-Service Spooler -ComputerName RM1 | Mulai layanan

Secara default, hanya administrator yang dapat memulai / menghentikan layanan pada Windows, tetapi Anda dapat memberikan hak istimewa untuk memulai kembali layanan tertentu untuk pengguna biasa.

Set-Service - ubah pengaturan layanan Windows

Cmdlet Setel layanan memungkinkan Anda untuk mengubah pengaturan atau pengaturan layanan pada komputer lokal atau jarak jauh. Karena status layanan adalah properti, cmdlet ini dapat digunakan untuk memulai, menghentikan, dan menjeda layanan. Cmdlet Setel layanan memiliki parameter -Jenis mulai, memungkinkan Anda untuk mengubah jenis layanan mulai.

Ubah jenis startup layanan spooler menjadi otomatis:

Set-Service spooler -startuptype otomatis -passthru

Anda dapat mentransfer layanan ke mulai manual:

Set-Service spooler -startuptype manual -passthru

Membuat dan Menghapus Layanan Windows dengan PowerShell

Layanan baru - cmdlet untuk membuat layanan baru di Windows. Untuk layanan baru, Anda perlu menentukan nama dan file yang dapat dieksekusi (Anda dapat menjalankan skrip PowerShell sebagai layanan Windows).

Dalam contoh tersebut, buat layanan baru yang disebut TestService.

new-service -name TestService -binaryPathName "C: \ WINDOWS \ System32 \ svchost.exe -k netsvcs"

Menggunakan parameter Get-WmiObject, kami memperoleh informasi tentang mode startup dan deskripsi layanan

get-wmiobject win32_service -filter "name = 'testservice'"

Anda dapat mengubah parameter layanan baru dengan perintah

Set-Layanan -Nama TestService -Deskripsi 'My Service' -StartupType Manual

Untuk menghapus layanan gunakan perintah

(Get-WmiObject win32_service -Filter "name = 'TestService'"). Hapus ()

Ubah akun untuk memulai layanan

Anda dapat mengubah akun tempat layanan dimulai. Dapatkan nama akun yang digunakan untuk memulai TestService

get-wmiobject win32_service -filter "name = 'TestService'" | | Pilih nama, nama mulai

Untuk mengubah nama akun dan kata sandi, jalankan perintah.

$ svc = get-wmiobject win32_service -filter "name = 'TestService'"
$ svc.GetMethodParameters ("ubah")

Hasilnya, kami mendapatkan daftar parameter dari metode Change (). Kami mempertimbangkan di mana parameter StartName dan StartPassword berada - masing-masing 20 dan 21 tempat.

$ svc | Invoke-WmiMethod -Name Change -ArgumentList @ ($ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, $ null, "Administrator", "P @ ssw0rd")

Atau Anda dapat menentukan nama akun gMSA. Kata sandi tidak ditentukan.

Seperti yang Anda lihat, PowerShell membuatnya mudah untuk mengelola layanan Windows. Anda dapat membuat, menghentikan, memulai dan melanjutkan kembali layanan, mengubah propertinya. Kebanyakan cmdlet memungkinkan Anda mengelola layanan di komputer jarak jauh..