![获取所有启动类型为“自动”的“已停止”服务的脚本 - Windows](https://linux22.com/image/1510187/%E8%8E%B7%E5%8F%96%E6%89%80%E6%9C%89%E5%90%AF%E5%8A%A8%E7%B1%BB%E5%9E%8B%E4%B8%BA%E2%80%9C%E8%87%AA%E5%8A%A8%E2%80%9D%E7%9A%84%E2%80%9C%E5%B7%B2%E5%81%9C%E6%AD%A2%E2%80%9D%E6%9C%8D%E5%8A%A1%E7%9A%84%E8%84%9A%E6%9C%AC%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
cmdlet 不提供具有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
}