Script para obter todos os serviços "parados" com tipo de inicialização "automático" - Windows

Script para obter todos os serviços "parados" com tipo de inicialização "automático" - Windows

Portanto, se um serviço tiver um tipo de inicialização "Automático" ou "Manual", mas estiver parado no momento, gostaria de executar um comando para ver esses problemas.

No PowerShell e no CMD, consigo ver um OU outro, mas não há uma maneira fácil de filtrar os dados de acordo com o que preciso.

Basicamente, estou procurando criar um roteiro para serviços de solução de problemas. Ele será capaz de determinar se há algum serviço que deveria ser iniciado (com base no tipo de inicialização), mas não está em execução (parado ou suspenso).

O problema que estou enfrentando é que o PowerShell ou o CMD não permitem filtros profundos ou canalização de resultados. Alguém tem uma maneira de me ajudar a descobrir isso?

Como posso resolver esse problema?

Responder1

Ao olhar paraessa questãovocê poderia criar isso para versões antigas do PowerShell:

Get-WmiObject -Class Win32_Service | Select-Object Name,State,StartMode | Where-Object {$_.State -ne "Running" -and $_.StartMode -eq "Auto"}

Com versões mais recentes (pelo menos 5 talvez 3/4) você também pode usar (o que foi sugerido por JC2k8):

Get-Service | Select-Object -Property Name,Status,StartType | Where-Object {$_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}

Nas versões mais antigas do PowerShell, o Get-Servicecmdlet não oferece um membro que tenha o StartType.

O PowerShell oferece suporte a muita filtragem e tubulação. :)

Responder2

(get-service|?{ $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"})|
select DisplayName, StartType, Status

Responder3

Get-Service | Where-Object {$_.Status -eq "Stopped"} | where starttype -match automatic

Responder4

Você pode tentar isso se for adequado ao seu problema. O código abaixo ajuda você a iniciar todos os serviços interrompidos relacionados ao Sophos AV que deveriam estar em execução porque possuem o tipo de inicialização automática.

# 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
}

informação relacionada