获取所有启动类型为“自动”的“已停止”服务的脚本 - 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
}

相关内容