![スタートアップの種類が「自動」であるすべての「停止」サービスを取得するスクリプト -- Windows](https://rvso.com/image/1510187/%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%8C%E3%80%8C%E8%87%AA%E5%8B%95%E3%80%8D%E3%81%A7%E3%81%82%E3%82%8B%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%80%8C%E5%81%9C%E6%AD%A2%E3%80%8D%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%20--%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
}