Как получить тип запуска службы Windows с помощью PowerShell и не использовать WMI?
Я заглянул внутрь Get-Service, и он не предоставляет что-то, чтобы отобразить "тип запуска".
Как получить тип запуска службы Windows с помощью PowerShell и не использовать WMI?
Я заглянул внутрь Get-Service, и он не предоставляет что-то, чтобы отобразить "тип запуска".
С версией PowerShell 4:
Вы можете выполнить команду, указанную ниже:
Get-Service | select -property name,starttype
WMI - это способ сделать это.
Get-WmiObject -Query "Select StartMode From Win32_Service Where Name='winmgmt'"
или
Get-WmiObject -Class Win32_Service -Property StartMode -Filter "Name='Winmgmt'"
В PowerShell вы можете использовать команду Set-Service:
Set-Service -Name Winmgmt -StartupType Manual
Я еще не нашел команду PowerShell для просмотра типа запуска. Можно было бы предположить, что команда Get-Service предоставит это, но это не похоже.
Насколько я знаю, нет никакого "родного" способа PowerShell для получения этой информации. И, возможно, это скорее ограничение .NET, чем PowerShell.
Вот предложение добавить эту функциональность в следующую версию:
Обходной путь WMI также существует, на всякий случай. Я использую это решение WMI для своих задач, и оно работает.
Вы также можете использовать:
(Get-Service 'winmgmt').StartType
Он возвращает только тип запуска, например, отключен.
Как только обновлен до версии PowerShell версии 5, вы можете получить тип запуска.
Чтобы проверить версию PowerShell, которую вы используете, используйте $PSVersionTable
.
Ниже приведены примеры для службы брандмауэра Windows:
Для локальной системы
Get-Service | Select-Object -Property Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
Для одной удаленной системы
Get-Service -ComputerName HOSTNAME_OF_SYSTEM | Select-Object -Property MachineName,Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
Для нескольких систем (необходимо создать файл system.txt)
Get-Service -ComputerName (Get-content c:\systems.txt) | Select-Object -Property MachineName,Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
Вы также можете использовать инструмент sc
, чтобы установить его.
Вы также можете вызвать его из PowerShell и добавить дополнительные проверки, если это необходимо.
Преимущество этого инструмента и PowerShell заключается в том, что инструмент sc
также может автоматически устанавливать тип старта.
# Get Service status
$Service = "Wecsvc"
sc.exe qc $Service
# Set Service status
$Service = "Wecsvc"
sc.exe config $Service start= delayed-auto
Использование:
Get-Service BITS | Select StartType
Или используйте:
(Get-Service -Name BITS).StartType
Тогда
Set-Service BITS -StartupType xxx
[PowerShell 5.1]
Если вы обновите PowerShell 5, вы можете запросить все службы на машине и отобразить имя и StartType и отсортировать его по StartType для удобства просмотра:
Get-Service |Select-Object -Property Name,StartType |Sort-Object -Property StartType