Я пытаюсь получить службы, которые находятся в автоматическом режиме, но не работает, и запустить их, за исключением нескольких служб, которые я хочу игнорировать в скрипте, чтобы проверить, есть ли выход для получения желаемого результата при правильном форматировании, как как видно на рисунке 2, из-за вывода строки выбора мой сценарий не может принять service.name в качестве переменной.
я использую команду ниже
Get-CimInstance win32_service -Filter "startmode = 'auto' AND state != 'running' " | select name, startname, exitcode | Select-String "gupdate|RemoteRegistry" -NotMatch
вывод, который я получаю
но желаемый результат равен
ниже мой сценарий
$Services = Get-CimInstance win32_service -Filter "startmode = 'auto' AND state != 'running' " | select name, startname, exitcode | Select-String -Pattern "gupdate|RemoteRegistry" -NotMatch
$ServicesRunning = Get-CimInstance win32_service -Filter "state = 'running'"
if ([string]::IsNullOrEmpty($Services)){
Write-Output "OK: All services running | ServicesRunning=$($ServicesRunning.Count);0;0;0;0"
$host.SetShouldExit(0)
}
else{
$ServicesStopped=""
ForEach ($Service in $Services){
Start-Service @($Service.Name) -ErrorAction SilentlyContinue | Out-Null
if ($(Get-Service -Name ($Service.Name)).Status -eq "running"){
$ServicesStopped += "($Service.Name)(Started manually),"
If ($ExitCode -eq 0){
$ExitCode = 1
}
}
Else{
$ServicesStopped += "$($Service.Name)(Stopped),"
$ExitCode = 2
}
}
If ($ExitCode -eq 2){
Write-Output "CRITICAL: Service(s) stopped: $($ServicesStopped.TrimEnd(",")) | ServicesRunning=$($ServicesRunning.Count);0;0;0;0"
$host.SetShouldExit(2)
}
Else{
Write-Output "WARNING: Service(s) stopped: $($ServicesStopped.TrimEnd(",")) | ServicesRunning=$($ServicesRunning.Count);0;0;0;0"
$host.SetShouldExit(1)
}
}