37414
Goto Top

Dienst prüfen und bei Bedarf starten

Hallo,

ich habe folgende Batchdatei, mit der ich einen Dienst starte:

sc \\SERVER start "dienst"  

Nun möchte ich mit der Batch vorab prüfen, ob der Dienst schon gestartet wurde.
Die Ergänzung zum obigen Code soll dann so aussehen:

"wenn der Dienst nicht gestartet ist, dann starte ihn".

Dabei bin ich mir nicht sicher, wie ich "if [not]" und die Abfrage für "running" richtig kombiniere.

Könnt Ihr weiterhelfen?

Danke und Gruß,
imebro

Content-Key: 666368

Url: https://administrator.de/contentid/666368

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: em-pie
em-pie 04.05.2021 um 08:53:26 Uhr
Goto Top
Moin,

da du vermutlich der erste auf der Welt bist, der das Problem hat face-wink:
$ServiceName = 'Serenade'  
$arrService = Get-Service -Name $ServiceName

while ($arrService.Status -ne 'Running')  
{

    Start-Service $ServiceName
    write-host $arrService.status
    write-host 'Service starting'  
    Start-Sleep -seconds 60
    $arrService.Refresh()
    if ($arrService.Status -eq 'Running')  
    {
        Write-Host 'Service is now Running'  
    }

}
Quelle: https://stackoverflow.com/questions/35064964/powershell-script-to-check- ...

Gruß
em-pie
Mitglied: 37414
37414 04.05.2021 um 09:04:41 Uhr
Goto Top
Danke Dir für die schnelle Antwort.

Das ist ja ein Powershell Script.
Wie würde die Lösung denn als Erweiterung meiner Batch aussehen?

Danke und Gruß,
imebro
Mitglied: xPyrox
xPyrox 04.05.2021 aktualisiert um 09:27:09 Uhr
Goto Top
Würde es mit der Powershell machen:

$computer = "dein_PC"  
$dienstname = "dein_Dienst"  

$service = Get-Service -ComputerName $computer -Name $dienstname

if ($service.Status -match "Running"){  
    Write-Host Dienst  läuft -ForegroundColor Green
    } else {
    Write-Host Dienst läuft nicht -ForegroundColor Red
    Set-Service -ComputerName $computer -Name $dienstname -Status Running
    }


//Edit: OK war zu spät :D
Mitglied: em-pie
em-pie 04.05.2021 um 09:26:16 Uhr
Goto Top
Wie würde die Lösung denn als Erweiterung meiner Batch aussehen?
Keine Ahnung.

Bisher kenne ich nur diese Zeile aus deiner Batch:
sc \\SERVER start "dienst"  

Daher würde ich schlicht die Powershell nutzen. Hat eh mehr Möglichkeiten und mehr Zukunft
Mitglied: TK1987
Lösung TK1987 04.05.2021 um 09:31:35 Uhr
Goto Top
Moin,

wo liegt der Sinn, auf einer toten Sprache rumzukauen, wenn du diese zudem noch nicht richtig beherrschst?
Powershell ist deutlich leichter zu erlernen und bei weitem nicht so fehleranfällig.

Aber wenn du deine masochistische Ader unbedingt befriedigen willst, bitteschön:
@echo off
set Service=w32time
set Server=\\SERVER

for /f "Tokens=3" %%A in ('sc %Server% query %Service% ^| findstr "STATE"') do (  
  if %%A equ 4 (echo.Servive "%Service%" laeuft bereits.) else (sc %Server% start %Service% )  
)

Gruß Thomas
Mitglied: 37414
37414 04.05.2021 aktualisiert um 09:58:46 Uhr
Goto Top
Danke für Eure weiteren Antworten.

Ich hatte absichtlich nach einer Batch-Lösung gefragt, da ich lieber mit Batch arbeite, als mit Powershell.
Und man darf doch bestimmte Vorlieben haben, ohne gleich ein Masochist zu sein... oder? face-wink

In der Batch brauche ich keine Ausgabe (echo), da alles im Hintergrund laufen soll (das würde auch für die Powershell gelten).
Die Batch liegt im Autostart und soll nach dem Start meines Rechners zunächst prüfen, ob dieser Service auf dem SERVER bereits läuft... Wenn nicht, dann soll er gestartet werden.

Kann ich aus Deinem (@Thomas) Code einfach den Eintrag "(echo.Servive "%Service%" laeuft bereits.) else" entfernen oder was muss ich ändern, wenn ich keine Echo-Ausgabe haben möchte (bzw. was müßte ich hierzu in der PS ändern)?

Danke und Gruß,
imebro
Mitglied: TK1987
TK1987 04.05.2021 aktualisiert um 09:57:45 Uhr
Goto Top
Zitat von @37414:
Und man darf doch bestimmte Vorlieben haben, ohne gleich ein Masochist zu sein... oder? face-wink
Wenn man sich lieber mit einer derart verbuggten Sprache rumschlägt - die enorm eingeschränkt ist und bei jedem Versuch ein Problem der Sprache zu umgehen nur immer weitere Probleme produziert - als mit einer der leichtverständlichsten und dabei trotzdem eine der mächtigsten Skriptsprachen, dann ist man eindeutig ein Masochist 😛.

Kann ich aus Deinem (@Thomas) Code einfach den Eintrag "(echo.Servive "%Service%" laeuft bereits.) else" entfernen oder was muss ich ändern, wenn ich keine Echo-Ausgabe haben möchte?
In dem fall macht es natürlich eher Sinn, die Überpfüfung zu negieren
if %%A neq 4 sc %Server% start %Service%
Mitglied: 37414
37414 04.05.2021 aktualisiert um 10:10:04 Uhr
Goto Top
@TK1987

Danke für die weitere Hilfe.

Allerdings möchte ich nochmal zu Deinem ersten Absatz etwas schreiben:
Ich finde, man sollte einem Thread-Ersteller immer auf SEINE Frage antworten und ihn nicht "runtermachen"... nur weil er vielleicht eine andere Meinung hat oder eben einen anderen Code bevorzugt, um sein Problem zu lösen. Darüber hinaus halte ich die Bezeichnung "Masochist" hier wirklich für völlig unangebracht und anmaßend. Solche Beleidigungen haben in einem Forum nichts zu suchen.
Ich respektiere es, wenn Du Powershell bevorzugst. Ich jedoch arbeite mit einigen Batchdateien und ich hatte noch nie Probleme damit. Wieso Du also von "Probleme prodozieren" schreibst oder von einer "verbuggten Sprache", entzieht sich meiner Kenntnis. Ich komme mit dem Ergebnis von Batchdateien bestens zurecht.

Danke nochmal für die Umsetzung.

Schöne Grüße,
imebro
Mitglied: DerWoWusste
DerWoWusste 04.05.2021 um 10:17:08 Uhr
Goto Top
Hi.

Die Prüfung ist unnötig. Einfach starten - wenn er bereits gestartet wurde, ist es gar nicht möglich, ihn erneut starten.
Mitglied: TK1987
TK1987 04.05.2021 aktualisiert um 10:47:01 Uhr
Goto Top
Zitat von @37414:
Darüber hinaus halte ich die Bezeichnung "Masochist" hier wirklich für völlig unangebracht und anmaßend. Solche Beleidigungen haben in einem Forum nichts zu suchen.
Das war auch eher mit einem zwinkernden Auge zu betrachten und keineswegs als Beleidigung gedacht. Sorry, wenn das für dich zu anstössig war.
Ich finde, man sollte einem Thread-Ersteller immer auf SEINE Frage antworten und ihn nicht "runtermachen"
Das hat überhaupt nichts mit "runtermachen" zu tun.
Jeder hier, der ausreichend Erfahrung mit Batch gemacht hat - und sich teils über Jahrzehnte notgedrungen damit rumärgern musste, wird dir vollkommen zurecht und letztendlich nur zu deinem eigenen Wohl dazu raten, deine Kenntnisse in dieser Sprache erst gar nicht weiter zu vertiefen.
Wieso Du also von "Probleme prodozieren" schreibst oder von einer "verbuggten Sprache", entzieht sich meiner Kenntnis.
Dann hast du auch noch nicht gerade viele Erfahrungen mit der Sprache gemacht.