![Скрипт для получения всех «остановленных» служб с типом запуска «автоматически» — Windows](https://rvso.com/image/1510187/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%C2%AB%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%C2%BB%20%D1%81%D0%BB%D1%83%D0%B6%D0%B1%20%D1%81%20%D1%82%D0%B8%D0%BF%D0%BE%D0%BC%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%20%C2%AB%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%C2%BB%20%E2%80%94%20Windows.png)
Поэтому, если служба имеет тип запуска «Автоматический» или «Ручной», но в данный момент остановлена, я бы хотел выполнить команду, чтобы увидеть эти проблемы.
В PowerShell и CMD я могу видеть и то, и другое, но нет простого способа отфильтровать данные так, как мне нужно.
Я в основном ищу скрипт для устранения неполадок служб. Он сможет определить, есть ли какие-либо службы, которые должны быть запущены (на основе их типа запуска), но не запущены (остановлены или приостановлены).
Проблема, с которой я сталкиваюсь, заключается в том, что PowerShell или CMD не позволяют выполнять глубокую фильтрацию или конвейеризацию результатов. Есть ли у кого-нибудь способ помочь мне разобраться с этим?
Как мне решить эту проблему?
решение1
Глядя наэтот вопросДля старых версий PowerShell можно придумать следующее:
Get-WmiObject -Class Win32_Service | Select-Object Name,State,StartMode | Where-Object {$_.State -ne "Running" -and $_.StartMode -eq "Auto"}
В более новых версиях (по крайней мере 5, может быть 3/4) вы также можете использовать (что было предложено JC2k8):
Get-Service | Select-Object -Property Name,Status,StartType | Where-Object {$_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}
В старых версиях PowerShell командлет Get-Service
не предлагает члена с расширением StartType
.
PowerShell поддерживает множество фильтров и конвейеров. :)
решение2
(get-service|?{ $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"})|
select DisplayName, StartType, Status
решение3
Get-Service | Where-Object {$_.Status -eq "Stopped"} | where starttype -match automatic
решение4
Вы можете попробовать это, если подходит для вашей проблемы. Код ниже поможет вам запустить все остановленные службы, связанные с Sophos AV, которые должны быть запущены, поскольку у них тип запуска «Автоматический».
# Start specific automatic start services not running
$service = "*sophos*"
$server = "<server_name>"
$stoppedServices = (Get-WmiObject Win32_Service -ComputerName $server | Where-Object {$_.Name -like $service -and $_.StartMode -eq 'Auto' -and $_.State -ne "Running"}).Name
foreach ($stoppedService in $stoppedServices) {
Write-Host -NoNewline "Starting Server/Service: "; Write-Host -ForegroundColor Green $server"/"$stoppedService
Get-Service -ComputerName $server -Name $stoppedService | Start-Service
}