スタートアップの種類が「自動」であるすべての「停止」サービスを取得するスクリプト -- 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-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
}

関連情報