Sie können Windows-Dienste nicht nur über das Snap-In „services.msc“ oder das Befehlszeilentool „sc.exe“ verwalten, sondern auch mit PowerShell. In diesem Artikel betrachten wir verschiedene Szenarien der Verwaltung von Windows-Diensten mit PowerShell.
Inhalt:
- PowerShell-Cmdlets zur Verwaltung von Windows-Diensten
- Wie überprüfe ich den Windows-Dienststatus mit Get-Service?
- Wie kann ich einen Dienst mit PowerShell stoppen, starten oder neu starten?
- Verwenden von Set-Service zum Ändern von Diensteinstellungen
- Wie erstelle oder lösche ich einen Windows-Dienst über PowerShell?
- Ändern Sie das Benutzerkonto, das den Windows-Dienst ausführt
PowerShell-Cmdlets zur Verwaltung von Windows-Diensten
Es gibt acht grundlegende Dienst-Cmdlets, mit denen Sie den Status von Windows-Diensten anzeigen und verwalten können. Um die vollständige Liste der Dienstverwaltungs-Cmdlets zu erhalten, führen Sie diesen Befehl aus:
Get-Help \*-Service
![Grundlegende Powershell-Cmdlets zum Verwalten von Windows-Diensten](/f/198a89678296de6e4d8a3fc04fc6032f.png)
- Get-Service – ermöglicht es, die Dienste auf einem lokalen oder Remote-Computer sowohl im laufenden als auch im gestoppten Zustand abzurufen;
- Neuer Service – erstellt einen Dienst. Das Cmdlet erstellt einen neuen Eintrag für einen Windows-Dienst in der Registrierung und in der Dienstdatenbank;
- Neustart-Service – startet einen Dienst neu. Das Cmdlet sendet die Neustartnachricht über den Windows Service Controller.
- Lebenslauf-Service – nimmt einen Dienst wieder auf. Das Cmdlet sendet eine Fortsetzungsnachricht an den Windows-Dienst-Manager.
- Set-Service – Ändert die Einstellungen eines lokalen oder Remote-Dienstes, einschließlich seines Status, seiner Beschreibung, seines angezeigten Namens oder seines Startmodus. Sie können dieses Cmdlet auch verwenden, um einen Dienst zu starten, zu stoppen oder anzuhalten.
- Dienst starten – startet einen Dienst;
- Dienst anhalten – stoppt einen Dienst (das Cmdlet sendet eine Stoppmeldung an den Windows-Dienstmanager);
- Suspend-Dienst – unterbricht einen Dienst. Ein angehaltener Dienst wird weiterhin ausgeführt, führt jedoch erst dann etwas aus, wenn er mithilfe des Cmdlets „Resume-Service“ wieder aufgenommen wird.
Eine detaillierte Beschreibung und Beispiele für die Verwendung eines bestimmten Cmdlets erhalten Sie mit Get-Help:
Get-Help Start-Service
![Hilfe bekommen](/f/c2b3c89f6d0c6809ad780fbe657a457f.png)
Wie überprüfe ich den Windows-Dienststatus mit Get-Service?
Sie können die Liste der Dienste und deren Status (Wird ausgeführt/Gestoppt) auf einem lokalen oder Remote-Computer abrufen Get-Service Cmdlet. Der -Name Mit dem Parameter können Dienste nach Namen ausgewählt werden. Der Dienstname kann mithilfe des Platzhalterzeichens angegeben werden *
.
![Überprüfen Sie den Windows-Dienststatus mit Get-Service](/f/c73fd6aa26980f661aabce28d34d4080.png)
Wenn Sie den genauen Dienstnamen nicht kennen, können Sie ihn anhand des angezeigten Namens finden, indem Sie Folgendes verwenden:Anzeigename Parameter. Sie können die Werteliste und Platzhalter verwenden.
![Powershell-Dienste abrufen](/f/7b6da07926bbab6d1191020af32ae73a.png)
Benutzen Sie die Get-Service Cmdlet mit dem -Computername Parameter, um den Dienststatus auf einem Remotecomputer abzurufen. Sie können den Dienststatus auf mehreren Remotecomputern gleichzeitig abfragen, indem Sie deren Namen durch Kommas getrennt angeben. Der unten gezeigte Befehl ruft beispielsweise den Spooler-Dienststatus auf den Remotecomputern ny-prnt1 und ny-prnt2 ab.
Get-Service spooler –ComputerName ny-prnt1,ny-prnt2
Statusname DisplayName. Laufender Spooler. Druckspooler. Spooler gestoppt Druckspooler
Um alle Eigenschaften eines Dienstes anzuzeigen, verwenden Sie die Objekt auswählen Cmdlet:
Get-Service spooler | Select-Object *
![Get-Service-Eigenschaften](/f/283d7b5856086277b0834218f9a5ac0e.png)
Mit dem Cmdlet Select-Object können bestimmte Eigenschaften eines Dienstes abgerufen werden. Sie möchten beispielsweise den Namen, den Status und die verfügbaren Optionen des Spooler-Dienstes anzeigen:
Get-Service Spooler | Select DisplayName, Status, ServiceName, Can*
![Get-Service-Status](/f/af4258f5f8ff49e881fc4c33f7ac0ac9.png)
Der Get-Service Das Cmdlet verfügt über zwei Parameter, mit denen Sie die Dienstabhängigkeiten anzeigen können:
- -Abhängige Dienste ermöglicht die Anzeige der vom jeweiligen Dienst abhängigen Dienste
- -Erforderliche Dienste Zeigt die Dienste an, von denen der angegebene Dienst abhängt
Der folgende Befehl zeigt die Dienste an, die zum Starten des Spooler-Dienstes erforderlich sind:
Get-Service –Name Spooler -RequiredServices
![Get-Service RequiredServices](/f/35cfcc59f415344c070ffddbe883dcb8.png)
Der folgende Befehl zeigt die Dienste an, die vom Spooler abhängen:
Get-Service –Name Spooler -DependentServices
![Get-Service DependentServices](/f/4c229491db80799f5082ff3a027a6799.png)
Wenn Sie die Dienste mit dem spezifischen Status oder Parametern finden möchten, verwenden Sie die Wo-Objekt Cmdlet. Lassen Sie uns zum Beispiel die Liste der ausgeführten Dienste abrufen:
Get-Service | Where-Object {$_.status -eq 'running'}
![Get-Service: Liste der laufenden Dienste](/f/d3e419da636745ff2e13ff4839aa61a3.png)
Um die Dienste mit dem manuellen Starttyp anzuzeigen, führen Sie diesen Befehl aus:
Get-Service | Where-Object {$_.starttype -eq 'Manual'}
![Erhalten Sie Service mit dem manuellen Starttyp](/f/6d9cd2d403f6b5c68bfd69ea6667c967.png)
Verwenden Sie das folgende PowerShell-Skript, um zu überprüfen, ob ein bestimmter Windows-Dienst auf einem aktuellen Computer vorhanden ist:
if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}
Wie kann ich einen Dienst mit PowerShell stoppen, starten oder neu starten?
Sie können einen Dienst mit stoppen Dienst anhalten Cmdlet. Um den Spooler zu stoppen, führen Sie den folgenden Befehl aus:
Stop-Service -Name spooler
Das Stop-Service-Cmdlet zeigt nach der Ausführung nichts an. Um das Ergebnis anzuzeigen, verwenden Sie die -Durchgehen Parameter.
![Stop-Service PassThru](/f/122746f90fc80fe129aa004295758aca.png)
Bitte beachten Sie, dass nicht jeder Dienst gestoppt werden kann. Wenn abhängige Dienste vorhanden sind, wird eine Fehlermeldung angezeigt:
Der Dienst kann nicht gestoppt werden, da er über abhängige Dienste verfügt. Es kann nur gestoppt werden, wenn das Force-Flag gesetzt ist.
![Der Dienst kann nicht gestoppt werden, da er über abhängige Dienste verfügt. Es kann nur gestoppt werden, wenn das Force-Flag gesetzt ist.](/f/ce4e48fdd59aa062ce3ba245291ad0d2.png)
Um das Beenden eines Dienstes zu erzwingen, verwenden Sie die -Gewalt Parameter. Beachten Sie, dass auch alle abhängigen Dienste gestoppt werden:
Stop-Service samss –Force -Passthru
Der folgende Befehl stoppt die angegebenen Dienste (Bits, Spooler), wenn sie sich im Status „Wird ausgeführt“ befinden:
get-service bits, spooler | where {$_.status -eq 'running'} | stop-service –passthru
![Stoppen Sie Dienste im laufenden Zustand](/f/9b18a0c0d01520146cec66da8aff7a52.png)
Der Dienst starten Cmdlet startet einen gestoppten Dienst:
Start-Service -Name spooler -PassThru
![Dienst starten](/f/d22b939f94b88e0dcc8bf6fc522cabc2.png)
Ein Dienst wird nicht gestartet, wenn einer seiner abhängigen Dienste gestoppt wird. Um sie zu finden und zu starten, verwenden Sie den folgenden PowerShell-Einzeiler:
get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}
![Powershell startet einen Dienst mit allen Abhängigkeiten](/f/64d66354cf5b6c188fdc5a9d832bb098.png)
Der Suspend-Servce Das Cmdlet kann Dienste anhalten, wenn sie diesen Status unterstützen. Um zu erfahren, ob ein Dienst ausgesetzt werden kann, verwenden Sie die Get-Service Cmdlet mit dem CanPauseAndContinue Eigentum.
Get-Service samss | Format-List name, canpauseandcontinue
![Der Get-Service kann angehalten und fortgesetzt werden](/f/86c74cbe306eb8f5c6aec6808c45f77a.png)
Um die Liste aller Dienste anzuzeigen, die möglicherweise angehalten werden, führen Sie diesen Befehl aus:
Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}
![Erhalten Sie einen Service mit der Option „canpauseandcontinue“.](/f/56ddbb134b95155e06c857adcebd7479.png)
Lassen Sie uns den SQLBrowser-Dienst anhalten:
Suspend-Service -Name SQLBrowser
![Suspend-Dienst](/f/c2bba42bfa0127801065c3c6d6444997.png)
Um einen unterbrochenen Dienst fortzusetzen, verwenden Sie die Lebenslauf-Service Cmdlet:
Resume-Service -Name SQLBrowser
![Lebenslauf-Service](/f/c8996d0da45227cf3f9c32d06909f498.png)
Der folgende Befehl setzt alle angehaltenen Dienste fort:
get-service | where-object {$_.Status -eq "Paused"} | resume-service
Der Neustart-Service Das Cmdlet startet einen Dienst neu:
Restart-Service -Name spooler
![Neustart-Service](/f/840ae4da8228d979da52050f163fab34.png)
Dieser Befehl startet alle gestoppten Netzwerkdienste auf einem Computer:
get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service
Diese Befehle haben nicht das –Computername Parameter, aber Sie können sie mit dem auf einem Remotecomputer ausführen Invoke-Befehl Cmdlet oder eine Pipe.
Um beispielsweise einen Druckspooler auf dem Remotecomputer ny-prnt1 neu zu starten, führen Sie den folgenden Befehl aus:Get-Service Spooler -ComputerName ny-prnt1 | Start-Service
Verwenden von Set-Service zum Ändern von Diensteinstellungen
Der Set-Service Mit dem Cmdlet können Sie beliebige Parameter oder Einstellungen eines Dienstes auf einem lokalen oder Remotecomputer ändern. Da der Status eines Dienstes eine Eigenschaft ist, können Sie mit diesem Cmdlet einen Dienst starten, stoppen oder anhalten. Set-Service hat die -Starttyp Parameter, der es ermöglicht, den Starttyp eines Dienstes zu ändern.
Ändern wir den Spooler-Starttyp auf „Automatisch“:
Set-Service spooler –startuptype automatic –passthru
![Ändern Sie den Starttyp des Druckspoolers in „Automatisch“.](/f/e750813bd9bdf452eac64561b74e7d51.png)
Sie können den manuellen Starttyp festlegen:
Set-Service spooler –startuptype manual –passthru
![Stellen Sie den manuellen Starttyp Set-Service ein](/f/d1a17d0abbce597ce4242748e8b3c876.png)
Wie erstelle oder lösche ich einen Windows-Dienst über PowerShell?
Neuer Service – ist ein Cmdlet zum Erstellen eines neuen Dienstes in Windows. Geben Sie den Namen und die ausführbare Datei für den neuen Dienst an (Sie können sogar Führen Sie ein PowerShell-Skript als Windows-Dienst aus).
Erstellen wir einen neuen Dienst mit dem Namen TestSvc:
new-service -name TestSvc -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"
![Neuer Dienst: Dienst mit Powershell erstellen](/f/55560dfd48e04460107b2ce9a60384b4.png)
Rufen Sie Informationen zum Starttyp und zur Beschreibung des Dienstes mit dem Cmdlet Get-WmiObject ab.
get-wmiobject win32_service -filter "name='testservice'"
![get-wmiobject win32_service](/f/e59a90c13f552fecce7af892819cc368.png)
Sie können die Einstellungen des neuen Dienstes mit dem folgenden Befehl ändern:
Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual
![Ändern Sie den Starttyp des Dienstes in „Manuell“.](/f/428e208b1dde9f74b34fa19eabfbcc54.png)
Um einen Dienst zu löschen, führen Sie diesen Befehl aus:
(Get-WmiObject win32_service -Filter ″name=′TestSvc′″).delete()
Ändern Sie das Benutzerkonto, das den Windows-Dienst ausführt
Sie können PowerShell verwenden, um das Benutzerkonto zu ändern, das zum Starten eines Dienstes verwendet wird. Rufen Sie den Namen des Kontos ab, mit dem TestSvc gestartet wird:
get-wmiobject win32_service -filter "name='TestSvc'" | Select name, startname
![Rufen Sie das Benutzerkonto ab, um den Dienst auszuführen](/f/1d0f00c9824a5d6ba4d7e39808013902.png)
Um den Benutzernamen und das Passwort für einen Windows-Dienst zu ändern, führen Sie die folgenden Befehle aus:
$svc = get-wmiobject win32_service -filter "name='TestSvc'"
$svc.GetMethodParameters("change")
Die Liste der Parameter der Change()-Methode wird angezeigt. Zählen Sie, wo sich die Parameter StartName und StartPassword befinden: Sie befinden sich auf der 20Th und 21st Plätze bzw.
![Ändern Sie das Runas-Benutzerkonto eines Windows-Dienstes](/f/e8d236d078dc7ba4c4703fdb676321c9.png)
$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","!123Pa$$w0rd")
Oder Sie können den Namen eines eingeben gMSA Konto (das Kontokennwort wird in diesem Fall nicht angegeben).
Wie Sie sehen, erleichtert PowerShell die Verwaltung von Windows-Diensten. Sie können Dienste erstellen, stoppen, starten oder fortsetzen und deren Eigenschaften ändern. Die meisten Cmdlets ermöglichen die Verwaltung von Diensten auf Remotecomputern.