시작 유형이 "자동"인 모든 "중지된" 서비스를 가져오는 스크립트 -- Windows

시작 유형이 "자동"인 모든 "중지된" 서비스를 가져오는 스크립트 -- Windows

따라서 서비스의 시작 유형이 "자동" 또는 "수동"이지만 현재 중지된 경우 명령을 실행하여 해당 문제를 확인하고 싶습니다.

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-Servicecmdlet이 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
}

관련 정보