Скрипт для удаления службы с удалённого хоста. Алгоритм весьма прост: вводим имя компьютера, получаем перечень служб на удалённом компьютере (отсортированы в алфавитном порядке), задаём переменной имя нужной службы из полученного списка, останавливаем её, отключаем запуск и удаляем.
Отключение запуска службы нужно, как страховочный вариант, если с удалением что-то пойдёт не так — cлужба в любом случае будет отключена и сама не перейдет в состояние «Running«.
## Шапка скрипта ## [System.Console]::Title = "Удаление служб на удалённом хосте" ## Имя хоста ## $hostname = Read-Host "Имя хоста" ## Получить список служб ## Get-WmiObject -ComputerName $hostname -Class Win32_Service | Select-Object Name, StartMode, State | Sort-Object -Property Name | ft ## Имя службы ## $scname = Read-Host "Имя службы" ## Остановка службы ## (Get-WmiObject -ComputerName $hostname -Class Win32_Service -Filter "Name='$scname'").StopService() ## Отключение запуска службы ## Set-Service -ComputerName $hostname -Name $scname -StartupType Disabled ## Удаление службы ## (Get-WmiObject -ComputerName $hostname -Class Win32_Service -Filter "Name='$scname'").delete() ## Ожидание ввода ## Read-Host "Нажмите Enter для выхода..."
В качестве отступления…
Чтобы получить перечень служб на удалённом хосте можно воспользоваться вот такой конструкцией из кода выше:
$hostname = Read-Host "Имя компьютера" Get-WmiObject -ComputerName $hostname -Class Win32_Service | Select-Object Name, StartMode, State | Sort-Object -Property Name | ft
Вывод представляет собой табличные данные с именем службы, режимом запуска и текущим состоянием. Сортировка в алфавитном порядке. Прописав в конце Out-File можно сохранить вывод команды в файл.
А в системном реестре все службы можно найти по этому пути:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Важно понимать, что удалив ветку с названием службы — удаляется сама служба!