PowerShell · 14.06.2022

Удаление службы из PowerShell

Скрипт для удаления службы с удалённого хоста. Алгоритм весьма прост: вводим имя компьютера, получаем перечень служб на удалённом компьютере (отсортированы в алфавитном порядке), задаём переменной имя нужной службы из полученного списка, останавливаем её, отключаем запуск и удаляем.

Отключение запуска службы нужно, как страховочный вариант, если с удалением что-то пойдёт не так — 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

Важно понимать, что удалив ветку с названием службы — удаляется сама служба!