Saat ini saya sedang menulis skrip penerapan yang menginstal sejumlah layanan Windows.
Nama layanan diversi, jadi saya ingin menghapus versi layanan Windows sebelumnya sebagai bagian dari pemasangan layanan baru.
Bagaimana cara terbaik saya melakukan ini di PowerShell?
powershell
windows-services
Adrian Russell
sumber
sumber
$service = Get-WmiObject -Class Win32_Service -Filter "Name='servicename'"
$service | Remove-WmiObject
$service.delete()
"Stop-Service 'servicename'; Get-CimInstance -ClassName Win32_Service -Filter "Name='servicename'" | Remove-CimInstance
Tidak ada salahnya menggunakan alat yang tepat untuk pekerjaan itu, saya menemukan berjalan (dari Powershell)
metode yang paling dapat diandalkan yang tidak memiliki banyak ketergantungan.
sumber
.exe
sampai saya melihat komentar Anda. Sekarang ini berfungsi untuk saya.\\server
) dihilangkan begitu saja jika layanannya adalah lokal.%
dan$_
Jika Anda hanya ingin memeriksa keberadaan layanan:
sumber
Saya menggunakan solusi "-ErrorAction SilentlyContinue" tetapi kemudian mengalami masalah yang menyebabkan ErrorRecord tertinggal. Jadi, inilah solusi lain untuk hanya memeriksa apakah Layanan menggunakan "Dapatkan-Layanan".
Tetapi ravikanth memiliki solusi terbaik karena Get-WmiObject tidak akan melakukan kesalahan jika Layanan tidak ada. Jadi saya memutuskan untuk menggunakan:
Jadi untuk menawarkan solusi yang lebih lengkap:
sumber
Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'"
danGet-Service $serviceName -ErrorAction Ignore
(yang sepenuhnya menyembunyikan kesalahan jika layanan tidak ada) untuk kelengkapan. Saya berharap Get-WmiObject mungkin lebih cepat karena tidak menimbulkan kesalahan. Saya sangat salah. Menjalankan masing-masing dalam satu loop 100 kali, Get-Service mengambil 0,16 detik sementara Get-WmiObject mengambil 9,66 detik. Jadi Get-Service 60x lebih cepat dari Get-WmiObject.Versi terbaru dari PS memiliki Remove-WmiObject. Waspadalah terhadap silent gagal untuk $ service.delete () ...
Untuk situasi saya, saya harus menjalankan 'Sebagai Administrator'
sumber
Untuk menghapus beberapa layanan di Powershell 5.0, karena layanan penghapusan tidak ada dalam versi ini
Jalankan perintah di bawah ini
sumber
Menggabungkan jawaban Dmitri & dcx saya buat ini:
sumber
Orang bisa menggunakan Where-Object
if ((Get-Service | Where-Object {$_.Name -eq $serviceName}).length -eq 1) { "Service Exists" }
sumber
Untuk memeriksa apakah layanan Windows yang bernama
MySuperServiceVersion1
ada, bahkan ketika Anda mungkin tidak yakin nama persisnya, Anda bisa menggunakan wildcard, menggunakan substring seperti:sumber
Untuk PC tunggal:
Makro untuk daftar PC:
sumber
PowerShell Core ( v6 + ) sekarang memiliki
Remove-Service
cmdlet .Saya tidak tahu tentang rencana untuk kembali-port ke Windows PowerShell, di mana tidak tersedia pada v5.1.
Contoh:
Perhatikan bahwa doa gagal jika layanan tidak ada, jadi untuk hanya menghapusnya jika saat ini ada, Anda bisa melakukan:
sumber
Untuk versi PowerShell sebelum v6, Anda dapat melakukan ini:
Untuk v6 +, Anda dapat menggunakan cmdlet Hapus-Layanan .
Perhatikan bahwa mulai pada Windows PowerShell 3.0, cmdlet Get-WmiObject telah digantikan oleh Get-CimInstance.
sumber
Adaptasi ini untuk mengambil daftar input server, tentukan nama host dan berikan beberapa hasil yang bermanfaat
sumber
Windows Powershell 6 akan memiliki cmdlet Hapus-Layanan . Sampai sekarang rilis Github menunjukkan PS v6 beta-9
Sumber: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-service?view=powershell-6
sumber