Bestimmte Dienste per BATCH auslesen und nach Auswahl beenden
Einen schönen guten Tag,
Folgendes:
Ich möchte ein Batch Script erstellen, was nach Aufruf eine Bestimmte Auswhl an Diensten auflistet, nummeriert (1,2,3......8,9).
Dann soll die Abfrage kommen, welcher Dienst beendet werden soll. Diese Abfrage soll dann mit der Nummer beantwortet werden, die vorab zugeordnet wurde.
Nach Eingabe der Nummer wird der Dienszt dann auf disabled geändert und der Task beendet (mus sso sein, da sich entsprechnede Dienste sonst immer wieder neu starten -> Ist softwareseitig so gewollt)
Mit wmic service where 'name like "%App %"' get name weden mir die Dienste aufgelistet:
App Dienst 1
App Dienst 2
App Dienst 3
App Dienst 4
Die Dienste unterscheiden sich allerdings vom Namen und Anzahl auf den Servern. Daher wird speziell nach dem Wort "App" gesucht gefolgt von einer Wildcard, da alle Dienste "App" voarngestell im Namen haben.
Wie bekomme ich nun jeden erkannten Dienst einer eigenen Variablen zugeordnet, die ich mit einer Nummer ansprechen kann?
Daran hänge ich gerade irgendwie fest.
Vielen Dank schonmal
Folgendes:
Ich möchte ein Batch Script erstellen, was nach Aufruf eine Bestimmte Auswhl an Diensten auflistet, nummeriert (1,2,3......8,9).
Dann soll die Abfrage kommen, welcher Dienst beendet werden soll. Diese Abfrage soll dann mit der Nummer beantwortet werden, die vorab zugeordnet wurde.
Nach Eingabe der Nummer wird der Dienszt dann auf disabled geändert und der Task beendet (mus sso sein, da sich entsprechnede Dienste sonst immer wieder neu starten -> Ist softwareseitig so gewollt)
Mit wmic service where 'name like "%App %"' get name weden mir die Dienste aufgelistet:
App Dienst 1
App Dienst 2
App Dienst 3
App Dienst 4
Die Dienste unterscheiden sich allerdings vom Namen und Anzahl auf den Servern. Daher wird speziell nach dem Wort "App" gesucht gefolgt von einer Wildcard, da alle Dienste "App" voarngestell im Namen haben.
Wie bekomme ich nun jeden erkannten Dienst einer eigenen Variablen zugeordnet, die ich mit einer Nummer ansprechen kann?
Daran hänge ich gerade irgendwie fest.
Vielen Dank schonmal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2619148687
Url: https://administrator.de/contentid/2619148687
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
9 Kommentare
Neuester Kommentar
Servus,
immer noch mit Batch unterwegs? .
Grüße Uwe
immer noch mit Batch unterwegs? .
@echo off &setlocal enabledelayedexpansion
:start
cls
echo Ihre Auswahl:
echo.
set cnt=1
for /f "tokens=2 delims==" %%a in ('wmic service where "name like 'App%%'" get name /value') do for /f "delims=" %%b in ("%%a") do (
echo [!cnt!] %%b
set "svc!cnt!=%%b"
set /a cnt+=1
)
echo.
set /p "num=Nummer eingeben:"
set "service=!svc%num%!"
if defined service (
echo Der Service !service! wird gestoppt und deaktiviert.
sc stop !service!
sc config !service! start= disabled
) else (
echo Ungueltige Nummer.
timeout /t 2 >nul
goto start
)
Sorry was vergessen, o. korrigiert.
unbedingt wollte, oder eben einen Einzeiler bauen. Kann ich dir gerne was nachliefern wenn gewünscht, bin nur gerade noch unterwegs.
Mal auf die Schnelle ein Einzeiler dafür
Frage mich aber warum dieser "App-Schmuh" überhaupt angewendet wird.und das auch noch manuell?
Wäre es denn per Powershell geschmeidiger?
Auf jeden Fall, da könntest du sogar noch eine komplette GUI draus bauen wenn manunbedingt wollte, oder eben einen Einzeiler bauen. Kann ich dir gerne was nachliefern wenn gewünscht, bin nur gerade noch unterwegs.
Mal auf die Schnelle ein Einzeiler dafür
Get-Service -Name App* | ogv -Title 'Dienste zum beenden und deaktivieren wählen' -Passthru | stop-service -Force -Passthru | set-service -Startuptype disabled
dann müsste ich wahrscheinlich auf allen Servern erst die Execution Policy anpassen.
Die Execution Policy ist ja eigentlich nur Schall und Rauch und lässt sich mit einem -EP "Bypass" bei Bedarf eh umgehen, schöner und effektiver ist es aber natürlich wenn man sie entsprechend ändert.Frage mich aber warum dieser "App-Schmuh" überhaupt angewendet wird.und das auch noch manuell?
Auf die Schnelle ein Einzeiler mit Gui. Da lassen sich auch mehrere oder alle markieren und mit Klick auf OK dann stoppen und deaktivieren.
(edit: Tippfehler korrigiert)
Entsprechende Rechte des ausführenden Principals natürlich vorausgesetzt.
Get-Service -Name App* | ogv -Title 'Dienste zum beenden und deaktivieren wählen' -Passthru | stop-service -Force -Passthru | set-service -Startuptype disabled
Entsprechende Rechte des ausführenden Principals natürlich vorausgesetzt.
Sorry,
wenn du deinen Post nachträglich änderst nachdem ich ihn gelesen habe, bekomme ich das nicht mit .
Grüße Uwe
wenn du deinen Post nachträglich änderst nachdem ich ihn gelesen habe, bekomme ich das nicht mit .
EDIT: Ich bräuchte ansatt dem stop-service das Kommando Stop-Process -Id <Prozess-ID des Dienstes> -Force -ErrorAction Stop
Bitte:$ErrorActionPreference = 'Stop'
Get-Service -Name App* | ogv -Title 'Dienste zum beenden und deaktivieren wählen' -Passthru | %{
try{
$id = (gcim win32_Service -Filter "Name = '$($_.Name)'").ProcessId
if ($id -gt 0){
Stop-Process -Id $id -Force
}
set-service -Name $_.Name -Startuptype disabled
}catch{
write-host "Error processing service '$($_.Name)' : $($_.Exception.Message)" -F Red
}
}