![Skript zum Abrufen aller „gestoppten“ Dienste mit dem Starttyp „automatisch“ – Windows](https://rvso.com/image/1510187/Skript%20zum%20Abrufen%20aller%20%E2%80%9Egestoppten%E2%80%9C%20Dienste%20mit%20dem%20Starttyp%20%E2%80%9Eautomatisch%E2%80%9C%20%E2%80%93%20Windows.png)
Wenn ein Dienst also den Starttyp „Automatisch“ oder „Manuell“ hat, aber derzeit gestoppt ist, möchte ich einen Befehl ausführen, um diese Probleme anzuzeigen.
In Powershell und CMD kann ich das eine ODER das andere sehen, aber ich kann die Daten nicht einfach nach den gewünschten Angaben filtern.
Ich möchte grundsätzlich ein Skript zur Fehlerbehebung bei Diensten erstellen. Es soll feststellen können, ob es Dienste gibt, die gestartet werden sollten (basierend auf ihrem Starttyp), aber nicht ausgeführt werden (gestoppt oder angehalten).
Das Problem, auf das ich stoße, ist, dass Powershell oder CMD keine detaillierte Filterung oder Weiterleitung von Ergebnissen zulassen. Kann mir jemand dabei helfen, das herauszufinden?
Wie kann ich dieses Problem lösen?
Antwort1
Durch einen Blick aufdiese FrageFür alte Versionen von PowerShell könnte Folgendes hilfreich sein:
Get-WmiObject -Class Win32_Service | Select-Object Name,State,StartMode | Where-Object {$_.State -ne "Running" -and $_.StartMode -eq "Auto"}
Bei neueren Versionen (mindestens 5, vielleicht 3/4) können Sie auch Folgendes verwenden (was von JC2k8 vorgeschlagen wurde):
Get-Service | Select-Object -Property Name,Status,StartType | Where-Object {$_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}
In älteren Versionen von PowerShell Get-Service
bietet das Cmdlet kein Mitglied mit dem an StartType
.
PowerShell unterstützt zahlreiche Filter- und Piping-Funktionen. :)
Antwort2
(get-service|?{ $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"})|
select DisplayName, StartType, Status
Antwort3
Get-Service | Where-Object {$_.Status -eq "Stopped"} | where starttype -match automatic
Antwort4
Sie können dies versuchen, wenn es zu Ihrem Problem passt. Der folgende Code hilft Ihnen, alle angehaltenen Dienste im Zusammenhang mit Sophos AV zu starten, die ausgeführt werden sollten, da sie den Starttyp „Automatisch“ haben.
# 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
}