Создать службу windows powershell

Управление службами Windows с помощью PowerShell

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

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

Существует восемь основных командлетов Service, предназначенных для просмотра состояния и управления службами Windows.

Чтобы получить весь список командлетов Service, введите команду:

  • Get-Service — позволяет получить службы на локальном или удаленном компьютере, как запущенные, так и остановленные;
  • New-Service – создать службу. Создает в реестре и базе данных служб новую запись для службы Windows;
  • Restart-Service – перезапустить службу. Передает сообщение об перезапуске службы через Windows Service Controller
  • Resume-Service – возобновить службы. Отсылает сообщение о возобновлении работы диспетчеру служб Windows;
  • Set-Service — изменить параметры локальной или удаленной службы, включая состояние, описание, отображаемое имя и режим запуска. Этот командлет также можно использовать для запуска, остановки или приостановки службы;
  • Start-Service – запустить службу;
  • Stop-Service – остановить службу (отсылает сообщение об остановке диспетчеру служб Windows);
  • Suspend-Service приостановить службу. Приостановленная служба по-прежнему выполняется, однако ее работа прекращается до возобновления работы службы, например с помощью командлета Resume-Service.

Получить подробное описание и примеры использования конкретного командлета можно через Get-help:

Get-Service: получаем список служб и их состояние

Получить список и состояние (Running/Stopped) службы на локальном или удаленном компьютере можно с помощью командлета Get-Service. Параметр -Name позволяет делать отбор по имени службы. Имя службы можно задать с использованием подстановочного символа *.

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

.

Командлет Get-Service можно использовать для получения состояния служб на удаленных компьютерах, указав параметр -ComputerName. Можно опросить статус службы сразу на множестве удаленных компьютеров, их имена нужно перечислить через запятую. Например, приведенная ниже команда получает состояние службы Spooler на удаленных компьютерах RM1 и RM2.

Get-Service spooler –ComputerName RM1,RM2

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

Get-Service spooler | Select-Object *

Командлет Select-Object позволит вывести определенные свойства службы. Например, нам нужно вывести имя, статус и доступные возможности службы Spooler:

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

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

  • Параметр -DependentServices позволяет вывести службы, которые зависят от данной службы;
  • Параметр -RequiredServices позволяет вывести службы, от которых зависит данная служба.

Приведенная ниже команда выводит службы, необходимые для запуска службе Spooler:

Get-Service –Name Spooler -RequiredServices

Следующая команда выводит службы, которые зависят от службы Spooler:

Get-Service –Name Spooler -DependentServices

При необходимости найти службы с определенным состоянием или параметрами, используйте командлет Where-Object. Например, получим список запущенных служб со статусом Running:

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

Проверить, что в системе имеется указанная служба:

if (Get-Service «ServiceTest» -ErrorAction SilentlyContinue)
<
Write-host «ServiceTest exists»
>

Читайте также:  Full update kali linux

Остановка, запуск, приостановка и перезапуск служб из PowerShell

Остановить службу можно с помощью командлета Stop-Service. Чтобы остановить службу печати, выполните команду:

Stop-Service -Name spooler

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

Обратите внимание, что не каждую службу можно остановить. Если есть зависимые службы, то получите ошибку

Для принудительной остановки используйте параметр –Force. Вы должны помнить, что остановятся также все зависимые службы:

Stop-Service samss –Force -Passthru

Следующая команда остановит перечисленные службы (bits,spooler) со статусом ”Running”:

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

Командлет Start-Service запускает остановленные службы:

Start-Service -Name spooler -PassThru

Служба не запустится, если есть остановленные зависимые службы. Чтобы их найти и включить:

get-service samss | Foreach

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

Get-Service samss | Format-List name, canpauseandcontinue

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

Приостановим службу SQLBrowser:

Suspend-Service -Name SQLBrowser

Для возобновления работы приостановленной службы служит командлет Resume-service:

Resume-Service -Name SQLBrowser

Следующая команда возобновляет работу всех приостановленных служб:

get-service | where-object <$_.Status -eq "Paused">| resume-service

Командлет Restart-Service перезапускает службу:

Restart-Service -Name spooler

Эта команда запускает все остановленные сетевые службы компьютера:

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

Параметр —ComputerName у этих командлетов отсутствует, но их можно выполнить на удаленном компьютере с помощью командлета 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

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

Set-Service spooler –startuptype manual –passthru

Создание и удаление служб Windows c помощью PowerShell

New-Service – командлет для создания новой службы в Windows. Для новой службы требуется указать имя и исполняемый файл (вы можете запустить PowerShell скрипт как службу Windows).

В примере создадим новую службу с именем TestService.

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

С помощью параметра Get-WmiObject получим информацию о режиме запуска и описание службы

get-wmiobject win32_service -filter «name=’testservice'»

Изменить параметры новой службы можно командой

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

Чтобы удалить службу используйте команду

(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 | 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 аккаунта. Пароль при этом не указывается.

Как видите, PowerShell позволяет легко управлять службами Windows. Можно создавать, останавливать, запускать и возобновлять службы, менять их свойства. Большинство командлетов позволяют управлять службами на удаленных компьютерах.

Управление службами Managing Services

Существует восемь основных командлетов Service, предназначенных для широкого спектра задач обслуживания. There are eight core Service cmdlets, designed for a wide range of service tasks . Мы рассмотрим только вывод списка служб и изменение состояния их выполнения, но вы можете получить весь список командлетов Service с помощью Get-Help \*-Service , а сведения о каждом из них можно просмотреть с помощью командлета Get-Help , например Get-Help New-Service . We will look only at listing and changing running state for services, but you can get a list of Service cmdlets by using Get-Help \*-Service , and you can find information about each Service cmdlet by using Get-Help , such as Get-Help New-Service .

Читайте также:  Удаленное подключение windows сеанс

Получение служб Getting Services

Получить службы на локальном или удаленном компьютере можно с помощью командлета Get-Service . You can get the services on a local or remote computer by using the Get-Service cmdlet. Как и в случае с Get-Process , использование команды Get-Service без параметров возвращает все службы. As with Get-Process , using the Get-Service command without parameters returns all services. Можно фильтровать по имени, даже используя звездочку как подстановочный знак: You can filter by name, even using an asterisk as a wildcard:

Так как реальное имя службы не всегда очевидно, может потребоваться найти службы по отображаемому имени. Because it is not always obvious what the real name for the service is, you may find you need to find services by display name. Это можно сделать с использованием определенного имени, подстановочных знаков или списка отображаемых имен: You can do this by specific name, using wildcards, or using a list of display names:

Параметр ComputerName командлета Get-Service можно использовать для получения служб на удаленных компьютерах. You can use the ComputerName parameter of the Get-Service cmdlet to get the services on remote computers. Параметр ComputerName принимает несколько значений и подстановочные знаки, что позволяет получить службы на нескольких компьютерах с помощью одной команды. The ComputerName parameter accepts multiple values and wildcard characters, so you can get the services on multiple computers with a single command. Например, приведенная ниже команда получает службы на удаленном компьютере Server01. For example, the following command gets the services on the Server01 remote computer.

Получение необходимых и зависимых служб Getting Required and Dependent Services

Командлет Get-Service имеет два параметра, которые удобно использовать при администрировании служб. The Get-Service cmdlet has two parameters that are very useful in service administration. Параметр DependentServices получает службы, которые зависят от данной службы. The DependentServices parameter gets services that depend on the service. Параметр RequiredServices получает службы, от которых зависит данная служба. The RequiredServices parameter gets services upon which this service depends.

Эти параметры просто отображают значения свойств DependentServices и ServicesDependedOn (псевдоним RequiredServices) объекта System.ServiceProcess.ServiceController, возвращаемого Get-Service, но они упрощают работу с командами и получение этой информации. These parameters just display the values of the DependentServices and ServicesDependedOn (alias=RequiredServices) properties of the System.ServiceProcess.ServiceController object that Get-Service returns, but they simplify commands and make getting this information much simpler.

Приведенная ниже команда получает службы, необходимые службе LanmanWorkstation. The following command gets the services that the LanmanWorkstation service requires.

Приведенная ниже команда получает службы, которым требуется служба LanmanWorkstation. The following command gets the services that require the LanmanWorkstation service.

Вы даже можете получить все службы, имеющие зависимости. You can even get all services that have dependencies. Следующая команда делает именно это, а затем она использует командлет Format-Table для отображения свойств Status, Name, RequiredServices и DependentServices для служб на компьютере. The following command does just that, and then it uses the Format-Table cmdlet to display the Status, Name, RequiredServices and DependentServices properties of the services on the computer.

Читайте также:  Что загружается windows при запуске системы

Остановка, запуск, приостановка и перезапуск служб Stopping, Starting, Suspending, and Restarting Services

Все командлеты Service имеют схожую общую форму. The Service cmdlets all have the same general form. Службы можно указать по общему имени или отображаемому имени, они также принимают списки и подстановочные знаки в качестве значений. Services can be specified by common name or display name, and take lists and wildcards as values. Для остановки очереди печати принтера используйте: To stop the print spooler, use:

Для запуска очереди печати принтера после ее остановки используйте: To start the print spooler after it is stopped, use:

Для приостановки очереди печати принтера используйте: To suspend the print spooler, use:

Командлет Restart-Service работает так же, как другие командлеты Service, но для него будет приведено несколько более сложных примеров. The Restart-Service cmdlet works in the same manner as the other Service cmdlets, but we will show some more complex examples for it. В самом простом случае указывается имя службы: In the simplest use, you specify the name of the service:

Вы получите повторяющееся предупреждение о запуске очереди печати принтера. You will notice that you get a repeated warning message about the Print Spooler starting up. При выполнении операции службы, занимающей некоторое время, Windows PowerShell сообщит, что по-прежнему пытается выполнить задачу. When you perform a service operation that takes some time, Windows PowerShell will notify you that it is still attempting to perform the task.

Если требуется перезапустить несколько служб, можно получить список служб, отфильтровать его и выполнить перезапуск: If you want to restart multiple services, you can get a list of services, filter them, and then perform the restart:

У этих командлетов Service нет параметра ComputerName, но их можно выполнить на удаленном компьютере с помощью командлета Invoke-Command. These Service cmdlets do not have a ComputerName parameter, but you can run them on a remote computer by using the Invoke-Command cmdlet. Например, приведенная ниже команда перезапускает службу очередь печати принтера на удаленном компьютере Server01. For example, the following command restarts the Spooler service on the Server01 remote computer.

Задание свойств служб Setting Service Properties

Командлет Set-Service изменяет свойства службы на локальном или удаленном компьютере. The Set-Service cmdlet changes the properties of a service on a local or remote computer. Так как состояние службы является свойством, этот командлет можно использовать для запуска, остановки и приостановки службы. Because the service status is a property, you can use this cmdlet to start, stop, and suspend a service. Командлет Set-Service также имеет параметр StartupType, позволяющий изменять тип запуска службы. The Set-Service cmdlet also has a StartupType parameter that lets you change the service startup type.

Чтобы использовать командлет Set-Service в Windows Vista и более поздних версиях Windows, откройте среду Windows PowerShell, используя параметр «Запуск от имени администратора». To use Set-Service on Windows Vista and later versions of Windows, open Windows PowerShell with the «Run as administrator» option.

Дополнительные сведения см. в статье о Set-Service. For more information, see Set-Service

Оцените статью