Teile des Druckernamens auslesen
Hallo Zusammen,
ich habe ein kleines Problem mit meinem Script. Leider bin ich noch ein Anfänger im Script schreiben. Ich möchte automatisiert alle Drucker entfernen, die mit "Drucker_Schalter_" beginnen.
Zunächst überprüfe ich mittels wmic ob solche Drucker überhaupt vorhanden sind um sie im Anschluß zu löschen:
Das erste ECHO (Druckername aus DeviceID: %%x) funktioniert noch einwandfrei, es wird mir der/die Drucker mit Drucker_Schalter_<ip-adresse> einwandfrei angezeigt, aber leider nicht in die Variable Druckername übergeben.
Zusätzlich möchte ich die IP-Adresse, die nach "Drucker_Schalter_"steht in eine Variable bernehmen. Ich benötige aber die Variablen um später mittels rundll32 printui.dll,PrintUIEntry /dd ...usw. den Drucker zu entfernen und in der Registry
den IP-Port zu löschen.
Könnt Ihr mir einen Tipp geben? Oder gibt es eine einfachere Möglichkeit?
Hintergrund des gesamten Script ist es alle Drucker auf einem Client die mit Drucker_Schalter_ beginnen zu löschen/deinstallieren und alle Dateien/Registryeinträge zu entfernen.
Also eine Art Deinstallationsroutine.
Das Entfernen der Schlüssel usw. mache ich mit REG DELETE..., das scheint auch zu funktionieren.
Noch eine Frage:
Wie kann ich einen Service mittels eines Scripts löschen?
Den Service um den es geht ist der "BrSplService" (Brother XP spl Service).
Stoppen kann ich ihn, aber wie kann ich den Service löschen?
Danke schon mal im voraus für Eure Unterstützung.
Grüße,
Flauschbobbel
ich habe ein kleines Problem mit meinem Script. Leider bin ich noch ein Anfänger im Script schreiben. Ich möchte automatisiert alle Drucker entfernen, die mit "Drucker_Schalter_" beginnen.
Zunächst überprüfe ich mittels wmic ob solche Drucker überhaupt vorhanden sind um sie im Anschluß zu löschen:
set NoInstDr=True
rem for /f "tokens=1-10 delims=:" %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do (
for /f %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do (
echo Druckername aus DeviceID: %%x
set "DruckerName=%%%x"
echo %Druckername%
REM echo Druckername aus DeviceID: %%x|findstr /c:"%DruckerName%" >NUL && (
call :WRITELOG %LINE%
call :WRITELOG "Pruefen, ob der Drucker existiert..."
set "DruckerName=%DefineDruckerName%%%x"
call :WRITELOG "Drucker: %DruckerName% existiert."
call :WRITELOG "Entferne %Druckername%..."
call :TOTAL_REMOVE_PRINTER
set NoInstDr=
set StopSrv=
)
)
If defined NoInstDr call :WRITELOG "Status NoInstDr: %NoInstDr% Drucker: %DruckerName% nicht vorhanden."
Das erste ECHO (Druckername aus DeviceID: %%x) funktioniert noch einwandfrei, es wird mir der/die Drucker mit Drucker_Schalter_<ip-adresse> einwandfrei angezeigt, aber leider nicht in die Variable Druckername übergeben.
Zusätzlich möchte ich die IP-Adresse, die nach "Drucker_Schalter_"steht in eine Variable bernehmen. Ich benötige aber die Variablen um später mittels rundll32 printui.dll,PrintUIEntry /dd ...usw. den Drucker zu entfernen und in der Registry
den IP-Port zu löschen.
Könnt Ihr mir einen Tipp geben? Oder gibt es eine einfachere Möglichkeit?
Hintergrund des gesamten Script ist es alle Drucker auf einem Client die mit Drucker_Schalter_ beginnen zu löschen/deinstallieren und alle Dateien/Registryeinträge zu entfernen.
Also eine Art Deinstallationsroutine.
Das Entfernen der Schlüssel usw. mache ich mit REG DELETE..., das scheint auch zu funktionieren.
Noch eine Frage:
Wie kann ich einen Service mittels eines Scripts löschen?
Den Service um den es geht ist der "BrSplService" (Brother XP spl Service).
Stoppen kann ich ihn, aber wie kann ich den Service löschen?
Danke schon mal im voraus für Eure Unterstützung.
Grüße,
Flauschbobbel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 88742
Url: https://administrator.de/contentid/88742
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
12 Kommentare
Neuester Kommentar
Na ja,
weiter hatte ich noch nicht reingelesen.
Weil ich auch irgendwie das Gefühl hatte, es ist nur ein Teilausschnitt..
Also:
a) da Drucker-Devicenamen ja durchaus aus mehreren Worten/Token bestehen können, solltest Du schon den kompletten Namen in die Variable %%x übernehmen.
Also "For /f "delims=" %%x in (....) "
b) Durch das Auskommentieren mit REM hast Du eine Klammer-Zu übrig.
Ich fürchte, da sagt der Batch "und tschüss".
Erstmal so weit. Bitte testen.
Grüße
Biber
[Edit] uppps, diesmal hatte ich wohl auch eher Tomaten auf den Augen...
Muss mich wohl erst an diese neue Forumsoptik gewöhnen...[/Edit]
weiter hatte ich noch nicht reingelesen.
Weil ich auch irgendwie das Gefühl hatte, es ist nur ein Teilausschnitt..
Also:
a) da Drucker-Devicenamen ja durchaus aus mehreren Worten/Token bestehen können, solltest Du schon den kompletten Namen in die Variable %%x übernehmen.
Also "For /f "delims=" %%x in (....) "
b) Durch das Auskommentieren mit REM hast Du eine Klammer-Zu übrig.
Ich fürchte, da sagt der Batch "und tschüss".
Erstmal so weit. Bitte testen.
Grüße
Biber
[Edit] uppps, diesmal hatte ich wohl auch eher Tomaten auf den Augen...
Muss mich wohl erst an diese neue Forumsoptik gewöhnen...[/Edit]
Hallo Flauschbobbel!
Grüße
bastla
[Edit] Die Verwendung der Variablen %DruckerName% ist mir bei näherer Betrachtung nicht so ganz klar - einerseits wird sie für die Suche benötigt, andererseits soll sie aufgrund des Ergebnisses neu gesetzt werden ... [/Edit]
ich hatte erwartet, dass beim Auslesen das gleiche Ergebnis herauskommt wie bei
"echo Druckername aus DeviceID: %%x "
... kann so in der Schleife (Stichwort "delayedExpansion") nicht funktionieren, daher eher:"echo Druckername aus DeviceID: %%x "
set NoInstDr=True
for /f %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do call :ProcessPrinter "%%x"
goto :eof
:ProcessPrinter
echo Druckername aus DeviceID: %~1
set "DruckerName=%~1"
echo %DruckerName%
for /f "tokens=3 delims=_" %%a in ("%DruckerName%") do set "IP=%%a"
echo IP: %IP%
...
...
goto :eof
bastla
[Edit] Die Verwendung der Variablen %DruckerName% ist mir bei näherer Betrachtung nicht so ganz klar - einerseits wird sie für die Suche benötigt, andererseits soll sie aufgrund des Ergebnisses neu gesetzt werden ... [/Edit]
Hallo Flauschbobbel!
Grüße
bastla
"Wie kann ich einen Service mittels eines Scripts löschen?"
Das sollte (wenn keine saubere Deinstallation möglich ist) lt Starttyp von Diensten per Batch/Script umschalten mit "sc.exe" oder (besser?) mit "service.vbs" (beide aus den W2000 Resource Kit Tools, ersteres seit XP auch Bestandteil des BS) gehen ...Grüße
bastla
Hallo Flauschbobbel!
Du kannst zum Test in Zeile 7 bzw am Beginn und Ende von ":ProcessPrinter" ein "set NoInstDr" setzen, um Dir den Status anzeigen zu lassen - aber wenn das Unterprogramm aufgerufen wird, müsste auch die Variable gelöscht werden. Noch genauer nachvollziehen kannst Du den Ablauf, wenn Du in Zeile 5 ein "echo on" einbaust und eine neue Zeile 16 mit "echo off" einfügst - es werden dann alle Befehle zuerst angezeigt und dann erst ausgeführt. Wenn Du jetzt noch den ganzen Batch zB mit
startest, kannst Du den Ablauf gut nachvollziehen.
Noch eine andere Sache: Die Verwendung der Variablen %DruckerName% ist mir weiterhin nicht klar - einerseits wird sie für die Suche (Zeile 6) benötigt, andererseits im Unterprogramm ":ProcessPrinter" neu gesetzt - eigentlich müssten das verschiedene Variablen sein ...
Grüße
bastla
Du kannst zum Test in Zeile 7 bzw am Beginn und Ende von ":ProcessPrinter" ein "set NoInstDr" setzen, um Dir den Status anzeigen zu lassen - aber wenn das Unterprogramm aufgerufen wird, müsste auch die Variable gelöscht werden. Noch genauer nachvollziehen kannst Du den Ablauf, wenn Du in Zeile 5 ein "echo on" einbaust und eine neue Zeile 16 mit "echo off" einfügst - es werden dann alle Befehle zuerst angezeigt und dann erst ausgeführt. Wenn Du jetzt noch den ganzen Batch zB mit
Batch.cmd>D:\Log.txt
Noch eine andere Sache: Die Verwendung der Variablen %DruckerName% ist mir weiterhin nicht klar - einerseits wird sie für die Suche (Zeile 6) benötigt, andererseits im Unterprogramm ":ProcessPrinter" neu gesetzt - eigentlich müssten das verschiedene Variablen sein ...
Grüße
bastla
Hallo Flauschbobbel!
Wenn (aufgrund des eingefügten "set NoInstDr") vor der "If defined NoInstDr"-Abfrage eine Meldung der Art "Die Umgebungsvariable "NoInstDr" ist nicht definiert." kommt, kann ich mir das Nicht-Ausführen des "Else"-Zweiges eigentlich nicht erklären ...
Anyhow: Versuchen wir's mit einem (zugegeben nicht wirklich schönen) Sprung:
Grüße
bastla
Wenn (aufgrund des eingefügten "set NoInstDr") vor der "If defined NoInstDr"-Abfrage eine Meldung der Art "Die Umgebungsvariable "NoInstDr" ist nicht definiert." kommt, kann ich mir das Nicht-Ausführen des "Else"-Zweiges eigentlich nicht erklären ...
Anyhow: Versuchen wir's mit einem (zugegeben nicht wirklich schönen) Sprung:
...
if defined NoInstDr goto :KeineDeinst
echo Drucker vorhanden, gehe zur Deinstallation
call :DEINSTALLATION
goto :ENDE
:KeineDeinst
REM Wenn kein Printer zum deinstallieren vorhanden ist
call :WRITELOG "Status NoInstDr: %NoInstDr% Kein weiterer Drucker zu deinstallieren."
echo Drucker nicht vorhanden
goto :ENDE
...
bastla