Dienste über BAT/CMD Datei (neu)starten

Enis S

Cadet 3rd Year
Registriert
März 2021
Beiträge
55
hey,

also kurz gesagt: ich möchte ein Dienst in Services.msc per Batch oder CMD Befehl ausführen. In Google finde ich leider nix dazu.

Danke schonmal im vorraus!
LG
 
es gibt hierzu PowerShell
start-service servicename

oldschool gibt es noch cmd > sc
 
  • Gefällt mir
Reaktionen: DJMadMax
Danke für die ultra schnelle Antwort oha xD Danke!
Ergänzung ()

Mach ich was falsch?
1627379212819.png
 
Du darfst nicht den Anzeigenamen nehmen, sondern den eigentlichen Dienstnamen:

1627379431340.png
 
  • Gefällt mir
Reaktionen: DJMadMax
1627379567367.png
Ich verstehe das mit dem Force nicht so ganz also das ist das was ich will aber ich raffst nicht
 
1627379738740.png
Ah ne habs Danke nochmal!
Ergänzung ()

Und wie kann ich es jetzt in eine Datei machen? .ps1 klappt bei mir nicht
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: DJMadMax
Powershell öffnet sich kurz. Steht nix drinnen und schließt sich direkt. Eventuell irgendwie Admin Rechte geben?
 
Führe zunächst die Befehlszeile: gwmi win32_service |select Displayname, Name | ogv aus. Der stellt Dir sämtliche Dienste mit ihrem Anzeigenamen und dem zu verwendenden Dienstnamen in einem Windows Fenster dar, das eine Filtermöglichkeit besitzt:

Dienste OGV.jpg

Darüber findest Du also problemlos dann den Dienstnamen, so wie er im Script verwendet werden muss. Und das "Force" muss als "-force" abgetrennt mit einem Leerzeichen an die Befehlszeile angehängt werden.

Die Zeile muss dann also so aussehen:

Dienst - restart.jpg

Dann funktioniert es auch.
 
  • Gefällt mir
Reaktionen: DJMadMax und PHuV
Enis S schrieb:
Powershell öffnet sich kurz. Steht nix drinnen und schließt sich direkt. Eventuell irgendwie Admin Rechte geben?
Ja, ohne Admin-Rechte kannst du keine System-Dienste beenden.
 
  • Gefällt mir
Reaktionen: kartoffelpü
Weiß man wie man z.B per Befehl Admin rechte anfordert?
 
Das Script prüft ob es als Admininstrator läuft, wenn nicht startet es sich mit Adminrechten neu. Ausprobiert habe ich das nicht aber ich könnte mir vorstellen das die UAC dann aufpopt, alles andere wäre sehr beängstigend.
PowerShell:
$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$princ = New-Object System.Security.Principal.WindowsPrincipal($identity)
if(!$princ.IsInRole( `
    [System.Security.Principal.WindowsBuiltInRole]::Administrator))
    {
    $powershell = [System.Diagnostics.Process]::GetCurrentProcess()
    $psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path
    $script = $MyInvocation.MyCommand.Path
    $prm = $script
    foreach($a in $args) {
        $prm += ' ' + $a
    }
    $psi.Arguments = $prm
    $psi.Verb = "runas"
    [System.Diagnostics.Process]::Start($psi) | Out-Null
    return;
}
Quelle
 
  • Gefällt mir
Reaktionen: NotNerdNotDau, DJMadMax und areiland
@sikarr
Hab ich schon so gemacht, funtioniert und die UAC poppt auch auf. Was man eben auch machen kann, ist, dass man ein solches Script in die Aufgabenplanung packt, es mit höchsten Privilegien ausführen lässt und dann nur diese Aufgabe per Verknüpfung ausführt. Dann nämlich poppt keine UAC mehr auf.
 
  • Gefällt mir
Reaktionen: sikarr
@h00bi ich würde auf alle Fälle vorher eine Prüfung machen
das geht ja auch mit der Powershell sehr schnell
die Skripte weiter oben sind viel zu kompliziert....

Hier ein Beispiel mit der Druckerwarteschlange
PowerShell:
$service = get-Service -Name Spooler

if ( $service.Status -ne "Running" ){
    Start-Service $service
}
 
  • Gefällt mir
Reaktionen: h00bi
h00bi schrieb:
Macht es Sinn vorher abzufragen ob der Dienst läuft, wenn man mit start-service arbeitet?
Kommt drauf an was du erreichen willst, sollte der Dienst schon laufen passiert gar nix. Willst du verhindern das du den Dienst mehrfach startest oder sicherstellen das er schon läuft dann macht das durchaus Sinn.
Rego schrieb:
die Skripte weiter oben sind viel zu kompliziert....
Kommt immer drauf an was man erreichen will.
 
areiland schrieb:
dass man ein solches Script in die Aufgabenplanung packt, es mit höchsten Privilegien ausführen lässt und dann nur diese Aufgabe per Verknüpfung ausführt. Dann nämlich poppt keine UAC mehr auf.
Das ist sinnvoll, wenn man das Skript nur für sich selbst ausführen möchte. Stellt man Skripte auch anderen Usern zur Verfügung und bindet es auf diese Weise ein, weiß der User nicht, was Sache ist, wenn er nicht über die nötigen Rechte verfügt und somit die Ausführung versagt wird.

sikarr schrieb:
Das Script prüft ob es als Admininstrator läuft,
Wäre es nicht besser, wenn man als ersten Schritt prüft, ob der Benutzer Angehöriger der Benutzergruppe der Administratoren ist?

In all meinen Skripten, in denen höhere Rechte gefordert sind, steht das Nachfolgende immer ganz oben:

PowerShell:
$ShowWindowAsync = Add-Type -MemberDefinition @'
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
'@ -Name 'Win32ShowWindowAsync' -Namespace Win32Functions –PassThru

Get-Process | Where-Object -FilterScript {$_.ProcessName -Eq "powershell" -And $_.Id -Ne $PID} | Stop-Process -PassThru

$SspSID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
$SspGRP = $SspSID.Translate([System.Security.Principal.NTAccount])
$SspADM = ($SspGRP.Value).Split('\')[1]

If ($SspADM -Eq "Administratoren")
{
    If (-NOT([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
    { 
        $RunAsArgs = "& '" + $MyInvocation.MyCommand.Definition + "'"
        [Void]$ShowWindowAsync::ShowWindowAsync((Start-Process PowerShell -Verb RunAs -ArgumentList $RunAsArgs).MainWindowHandle, 0)
        Break
    }
    Else
    {
        [Void]$ShowWindowAsync::ShowWindowAsync((Get-Process –Id $PID).MainWindowHandle, 0)
        $ErrorActionPreference = "SilentlyContinue"
    }
}
Else
{
    $OUTPUT = [System.Windows.Forms.MessageBox]::Show("Diese Anwendung kann nur von Administratoren,`ndie im System über die entsprechenden Rechte`nverfügen, ausgeführt werden!`n`nWenden Sie sich ggf. an Ihren System-Administrator!","Keine Berechtigung!","OK","Error")
    If ($OUTPUT -Eq "OK")
    {
        Exit -1
    }
}

[Void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[Void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")

If($MyInvocation.MyCommand.CommandType -Eq "ExternalScript")
{$ScriptPath = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition}
Else{$ScriptPath = Split-Path -Parent -Path ([Environment]::GetCommandLineArgs()[0])}

$ErrorActionPreference = "SilentlyContinue"

1. Das PS-Konsolenfenster wird unterdrückt.
2. Es wird geprüft, ob PS bereits geöffnet ist und wenn ja, wird es geschlossen.
3. Prüft, ob der Benutzer der Benutzergruppe der Administratoren angehörig ist.
Anm.: Wer andere Sprachversionen als die deutsche von Windows nutzt, muss den Begriff "Administratoren" entsprechend der vorhandenen Sprache anpassen. (z.B. Englisch = "Administratores")
4. Falls nein, wird der Benutzer darüber informiert, warum das Skript nicht ausgeführt werden kann.
5. Falls ja, wird das Skript mit UAC-Abfrage ausgeführt.
6. Die Form wird, bei Verwendung einer solchen, geladen.
7. Das Verzeichnis des aktuell ausgeführten Skriptes wird definiert. ($ScriptPath)
8. Unsinnige Fehlermeldungen und Hinweise werden unterdrückt.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: sikarr
Zurück
Oben