У Windows ви можете управляти службами не тільки з графічної консолі services.msc або утиліти командного рядка Sc.exe (первоначальна включалася в пакет ресурсів Resource Kit), але і за допомогою PowerShell. У цій статті ми дивимося різні сценарії управління службами Windows за допомогою PowerShell.

Основні командлети PowerShell для керування службами Windows

Існує вісім основних командлетів Service, призначених для перегляду стану і управління службами Windows.

Щоб отримати весь список командлетів Service, введіть команду:

Get-Help *-Service

операторами послуг windows з powershell

  • Get-Service – дозволяє отримати служби на локальному або віддаленому комп’ютері, як запущені, так і зупинені;
  • Нова послуга – створити службу. Створює в реєстрі і базі даних служб новий запис для служби Windows;
  • Сервіс перезапуску – перезапустити службу. Передає повідомлення про перезапуск служби через Windows Service Controller
  • Резюме-Сервіс – відновити служби. Відсилає повідомлення про відновлення роботи диспетчеру служб Windows;
  • Set-Service – змінити параметри локальної або віддаленої служби, включаючи стан, опис, псевдонім та режим запуску. Цей командлет також можна використовувати для запуску, зупинки або припинення служби;
  • Старт-Сервіс – запустити службу;
  • Стоп-сервіс – зупинити службу (відсилає повідомлення про зупинку диспетчеру служб Windows);
  • Призупинити обслуговування призупинити службу. Призупинена служба як і раніше виконується, однак її робота припиняється до відновлення роботи служби, наприклад за допомогою командлета Resume-Service.

Отримати докладний опис і приклади використання конкретного командлет можна через Get-help:

Get-Help Start-Service

Отримати довідку Початок роботи

Get-Service: отримуємо список служб і їх стан

Отримати список і стан (Running / Stopped) служби на локальному або віддаленому комп’ютері можна за допомогою командлета Get-Service. Параметр -Name дозволяє робити відбір на ім’я служби. Ім’я служби можна задати з використанням групових символів *.

Get-Service перегляд стану служб

Якщо ви не знаєте точне ім’я служби, є можливість знайти служби по псевдонімом за допомогою параметра –DisplayName. Можна використовувати список значень і символи узагальнення.

Get-Service пошук по імені служби .

Командир Get-Service можна використовувати для отримання стану служб на віддалених комп’ютерах, вказавши параметр -Ім’я комп’ютера. Можна опитати статус служби відразу на безлічі віддалених комп’ютерів, їх імена потрібно перерахувати через кому. Наприклад, наведена нижче команда отримує стан служби Spooler на віддалених комп’ютерах RM1 і RM2.

Get-Service spooler –ComputerName RM1,RM2

Status Name DisplayName
------ ---- -----------
Running spooler Print Spooler
Stopped spooler Print Spooler

Вивести всі властивості служби дозволить командлет Select-Object:

Get-Service spooler | Select-Object *

вивести всі властивості служби windows

Командир Виберіть-Об’єкт дозволить вивести певні властивості служби. Наприклад, нам потрібно вивести ім’я, статус і доступні можливості служби Spooler:

Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*

Get-Service - чи можна перезапускати, пріостаналівать службу windows

Командир Get-Service має два параметри, які дозволяють одержати залежності служб:

  • параметр -DependentServices дозволяє вивести служби, які залежать від даної служби;
  • параметр -Потрібні послуги дозволяє вивести служби, від яких залежить ця служба.

Наведена нижче команда виводить служби, необхідні для запуску службі Spooler:

Get-Service –Name Spooler -RequiredServices

Get-Service RequiredServices залежності служби в windows

Наступна команда виводить служби, які залежать від служби Spooler:

Get-Service –Name Spooler -DependentServices

Get-Service DependentServices

При необхідності знайти служби з певним станом або параметрами, використовуйте командлет Де-Об’єкт. Наприклад, отримаємо список запущених служб зі статусом Running:

Get-Service | Where-Object {$_.status -eq 'running'}

Get-Service |  Where-Object status -eq 'running' - вивести запущені служби

Для виведення служб з типом запуску Manual, виконайте команду

Get-Service | Where-Object {$_.starttype -eq 'Manual'}

Get-Service |  Where-Object {$ _. Starttype -eq 'Керівництво'

Перевірити, що в системі є зазначена служба:

if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}

Зупинка, запуск, припинення і перезапуск служб з PowerShell

Зупинити службу можна за допомогою командлета Стоп-сервіс. Щоб зупинити службу друку, виконайте команду:

Stop-Service -Name spooler

Командлет Stop-Service не виводить ніяких даних після виконання. Щоб побачити результат виконання команди, використовуйте параметр -PassThru.

Командлет Stop-Service - зупинить службу

Зверніть увагу, що не кожного службу можна зупинити. Якщо є залежні служби, то отримаєте помилку

Cannot stop service because it has dependent services. It can only be stopped if force flag set.

Stop-Service - помилка Не вдається зупинити службу, оскільки вона має залежні служби.  Зупинити його можна лише за умови встановлення прапорця сили

Для примусової зупинки використовуйте параметр –Сила. Ви повинні пам’ятати, що зупиняться також всі залежні служби:

Stop-Service samss –Force -Passthru

Наступна команда зупинить перераховані служби (bits, spooler) зі статусом “Running”:

get-service bits,spooler | where {$_.status -eq 'running'} | stop-service –passthru

зупинити кілька служб з powershell

Командир Старт-Сервіс запускає зупинені служби:

Start-Service -Name spooler -PassThru

Start-Service -запуск служби

Служба не запуститься, якщо є зупинені залежні служби. Щоб їх знайти і включити:

get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}

Start-Service запустити службу і все залежні служби

Командир Призупинити обслуговування може призупиняти служби, що допускають тимчасове припинення і відновлення. Для отримання відомостей про можливість тимчасового припинення конкретної служби використовуйте командлет Get-Service з властивістю «CanPauseAndContinue«.

Get-Service samss | Format-List name, canpauseandcontinue

Get-Service можна зупинити і продовжити

Щоб відобразити список усіх служб, робота яких може бути припинена, введіть команду:

Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}

список служб, які дозволяють призупинення

Призупинимо службу SQLBrowser:

Suspend-Service -Name SQLBrowser

Призупинити обслуговування

Для відновлення роботи призупиненої служби служить командлет Резюме-послуга:

Resume-Service -Name SQLBrowser

Резюме-Сервіс

Наступна команда відновлює роботу всіх припинених служб:

get-service | where-object {$_.Status -eq "Paused"} | resume-service

Командир Сервіс перезапуску перезапускає службу:

Restart-Service -Name spooler

Restart-Service - перезапуск служби windows

Ця команда запускає все зупинені мережеві служби комп’ютера:

get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service

параметр –Ім’я комп’ютера у цих командлетів відсутня, але їх можна виконати на віддаленому комп’ютері за допомогою командлета Invoke-Command або через пайп:

Наприклад, щоб перезапустити чергу друку на віддаленому комп’ютері RM1, виконайте команду:
Get-Service Spooler -ComputerName RM1 | Start-Service

Set-Service – зміна налаштувань служби Windows

Командир Set-Service дозволяє змінити параметри або настройки служб на локальному або віддаленому комп’ютері. Так як стан служби є властивістю, цей командлет можна використовувати для запуску, зупинки та припинення служби. командлет Set-Service має параметр -StartupType, Що дозволяє змінювати тип запуску служби.

Змінимо тип запуску служби spooler на автоматичний:

Set-Service spooler –startuptype automatic –passthru

Set-Service включити автозапуск для служби

Можна перевести службу на ручний (manual) запуск:

Set-Service spooler –startuptype manual –passthru

ручний запуск служби

Створення та видалення служб Windows c допомогою PowerShell

Нова послуга – командлет для створення нової служби в Windows. Для нової служби потрібно вказати ім’я та виконуваний файл (ви можете запустити PowerShell скрипт як службу Windows).

У прикладі створимо нову службу з ім’ям TestService.

new-service -name TestService -binaryPathName "C:WINDOWSSystem32svchost.exe -k netsvcs"

New-Service створити нову службу в windows

За допомогою параметра Get-WmiObject отримаємо інформацію про режим запуску і опис служби

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

get-wmiobject win32_service -filter "ім'я =

Змінити параметри нової служби можна командою

Set-Service -Name TestService -Description ‘My Service’ -StartupType Manual

Set-Service - змінити тип запуску служби

Щоб видалити службу використовуйте команду

(Get-WmiObject win32_service -Filter ″name=′TestService′″).delete()

Зміна облікового запису для запуску служби

Ви можете змінити обліковий запис, з-під якої запускається служба. Отримаємо ім’я облікового запису, яка використовується для запуску служби TestService

get-wmiobject win32_service -filter "name="TestService"" | Select name,startname

змінити обліковий запис для запуску служб

Для зміни імені та пароля облікового запису виконуємо команди.

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

В результаті отримуємо список параметрів методу Change (). Вважаємо на якому місці знаходяться параметри StartName і StartPassword – 20 і 21 місце відповідно.

svc.GetMethodParameters

$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")

Або ви можете вказати ім’я gMSA аккаунта. Пароль при цьому не вказується.

Invoke-WmiMethod - запуск служби з під іншого користувача

Як бачите, PowerShell дозволяє легко керувати службами Windows. Можна створювати, зупиняти, запускати і відновлювати служби, міняти їх властивості. Більшість командлетів дозволяють управляти службами на віддалених комп’ютерах.

Leave a Reply

Your email address will not be published. Required fields are marked *