Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Teile des Druckernamens auslesen

Frage Entwicklung Batch & Shell

Mitglied: Flauschbobbel

Flauschbobbel (Level 1) - Jetzt verbinden

29.05.2008, aktualisiert 18.10.2012, 5574 Aufrufe, 12 Kommentare

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:

01.
  
02.
	set NoInstDr=True 
03.
 
04.
rem for /f "tokens=1-10 delims=:" %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do ( 
05.
for /f  %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do ( 
06.
		echo  Druckername aus DeviceID: %%x 
07.
		set "DruckerName=%%%x" 
08.
		echo %Druckername% 
09.
		REM echo  Druckername aus DeviceID: %%x|findstr /c:"%DruckerName%" >NUL && ( 
10.
		call :WRITELOG %LINE% 
11.
		call :WRITELOG "Pruefen, ob der Drucker existiert..." 
12.
		set "DruckerName=%DefineDruckerName%%%x" 
13.
		call :WRITELOG "Drucker: %DruckerName% existiert." 
14.
		call :WRITELOG "Entferne %Druckername%..." 
15.
		call :TOTAL_REMOVE_PRINTER 
16.
		set NoInstDr= 
17.
		set StopSrv= 
18.
19.
20.
 
21.
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
Mitglied: Biber
29.05.2008 um 18:42 Uhr
Moin flauschbobbel,

hilft es, wenn Du..
set "DruckerName=%%%x"
ersetzt durch ..
set "DruckerName=%%x"
?

Grüße
Biber
Bitte warten ..
Mitglied: Flauschbobbel
29.05.2008 um 19:58 Uhr
Hallo Biber,

leider nein. Das Ergebnis ist das gleiche: "Drucker_Schalter_"
Ich hatte erwartet, dass beim Auslesen das gleiche Ergebnis herauskommt wie bei
"echo Druckername aus DeviceID: %%x "

Hast Du noch weiter Ideen?

Danke und Gruß,
Flauschbobbel
Bitte warten ..
Mitglied: Biber
29.05.2008 um 20:30 Uhr
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]
Bitte warten ..
Mitglied: bastla
29.05.2008 um 20:39 Uhr
Hallo Flauschbobbel!

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:
01.
  
02.
	set NoInstDr=True 
03.
 
04.
for /f  %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do call :ProcessPrinter "%%x" 
05.
goto :eof 
06.
 
07.
:ProcessPrinter 
08.
echo  Druckername aus DeviceID: %~1 
09.
set "DruckerName=%~1" 
10.
echo %DruckerName% 
11.
for /f "tokens=3 delims=_" %%a in ("%DruckerName%") do set "IP=%%a" 
12.
echo IP: %IP% 
13.
... 
14.
... 
15.
 
16.
goto :eof
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]
Bitte warten ..
Mitglied: Flauschbobbel
29.05.2008 um 20:54 Uhr
Hallo bastla,

Klasse!! Es funktioniert!!! Herzlichen Dank!

@Biber: Dir ebenfalls herzlichen Dank!

Habt Ihr Spezialisten trotzdem noch einen Tipp zum Thema:
"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?

Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
29.05.2008, aktualisiert 18.10.2012
Hallo Flauschbobbel!

"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
Bitte warten ..
Mitglied: Flauschbobbel
03.06.2008 um 17:51 Uhr
Hallo bastla,

ich habe noch ein Verständnisproblem. Schau Dir bitte den Auszug aus meinem Skript an.

Mein Ziel ist es, zunächst zu überprüfen, ob überhaupt ein Drucker zu deinstallieren ist, der meinen Kriterien entspricht. Wenn nicht, soll eine Meldung ausgegeben werden und das Skript beendet sich.
Sind Drucker vorhanden, die meinen Kriterien entsprechen (Identisch mit %DruckerName%), dann sollen zunächst die Drucker gelöscht werden. Das funktioniert ja nun auch einwandfrei mit der for-Schleife.

Sind alle möglichen Drucker gelöscht, das können durchaus mehrere sein, dann soll der Punkt DEINSTALLATION angesprochen werden und einmalig die Treiber deinstalliert werden, der Spooler restartet werden, einige Registry-Keys und Dateien gelöscht werden.

Ich wollte die Abfrage mit der Schaltervariable NoInstDr lösen. Die wird zunächst gesetzt. Im Laufe des Unterprogramms "ProcessPrinter" wir die Variable gelöscht.
Kommt der Batch aus dem Unterprogramm wieder zurück, frage ich die Variable ab. Wenn sie gesetzt ist ist keine weitere Aktion durchzuführen, wenn nicht dann soll das Unterprogramm DEINSTALLATION einmalig durchgeführt werden.

Irgendwie funktioniert es aber nicht bei mir.

Hier der Auszug aus meinem Skript:

01.
:CHECK_PRINTER 
02.
::  	Pruefen, ob der Drucker installiert ist. 
03.
:: 	Schalter-Variable: NoInstDr  
04.
	set NoInstDr=True 
05.
 
06.
for /f  %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do call :ProcessPrinter "%%x"  
07.
 
08.
If defined NoInstDr ( 
09.
	REM Wenn kein Printer zum deinstallieren vorhanden ist 
10.
	call :WRITELOG "Status NoInstDr: %NoInstDr%  Kein weiterer Drucker zu deinstallieren." 
11.
	echo Drucker nicht vorhanden 
12.
) else (  
13.
	echo Drucker vorhanden, gehe zur Deinstallation			 
14.
 	call :DEINSTALLATION 
15.
16.
	goto :ENDE 
17.
 
18.
 
19.
:DEINSTALLATION 
20.
	call :DEINSTALL_DRIVER 
21.
	call :STOP_START_SPOOLER 
22.
	call :DEL_REG_KEYS 
23.
	call :DEL_DIR_FILES 
24.
	goto :eof 
25.
 
26.
 
27.
:ProcessPrinter  
28.
	set "DruckerName=%~1"  
29.
	for /f "tokens=3 delims=_" %%a in ("%DruckerName%") do set "IPPortName=IP_%%a"  
30.
	call :WRITELOG "Pruefen, ob der Drucker existiert..." 
31.
	call :WRITELOG "Drucker: %DruckerName% existiert." 
32.
	call :DELETE_PRINTER 
33.
	set NoInstDr=  
34.
	goto :eof

Der erste Teil, also wenn kein Drucker zum deinistallieren vorhanden ist, wird sauber ausgeführt.
Finden sich Drucker zur Deinstallation werden die Drucker einwandfrei gelöscht (Unterprogarmm ProcessPrinter), die Schaltervariable wird auch gelöscht, aber es wird nicht in das Unterprogramm DEINSTALLATION gesprungen.
Kannst Du mir erklären warum?
Die Variable NoInstDr ist doch nicht mehr gesetzt. Dann müsste doch der "else"-Teil ausgeführt werden?

Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
03.06.2008 um 19:39 Uhr
Hallo Flauschbobbel!

Ob das Leerzeichen am Ende der Zeile 33 durch die Forumssoftware eingefügt wurde, kann ich nicht sagen - jedenfalls gehört dort aber keines hin (da damit die Variable erhalten bleibt). Sicherstellen kannst Du das durch diese Schreibweise:
01.
set "NoInstDr="
Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
03.06.2008 um 20:33 Uhr
Hallo bastla,

danke, habe ich geändert. Aber leider wird trotzdem das Unterprogramm DEINSTALLATION nicht ausgeführt. Hast Du noch eine Idee?

Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
03.06.2008 um 21:03 Uhr
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
01.
Batch.cmd>D:\Log.txt
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
Bitte warten ..
Mitglied: Flauschbobbel
03.06.2008 um 22:11 Uhr
Hallo bastla,

habe ich gemacht. Die Variable wird im Unterprogramm sauber gelöscht.
Daher verstehe ich nicht, wenn die Routine aus dem Unterprogramm ProcessPrinter zurückkommt ist die Variable nicht gesetzt. Daher müsste doch der 2. Teil der "If defined"-Abfrage greifen und in das Unterprogramm DEINSTALLATION gehen, oder?

Zum Thema %DruckerName%:
Unsere Drucker in den Standorten heißen alle "Drucker_Schalter_<ip-adresse>".
Zu Beginn des Skripts ist die Variable mit "Drucker_Schalter_" gesetzt. Danach suche ich in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"'). Wenn ein solcher Drucker existiert, lese ich die IP-Adresse aus und setze die Variable neu, z.B. auf "Drucker_Schalter_192.168.1.225" und lösche dann in einem Unterprogramm den Drucker mit diesem Namen. Sicher hast Du Recht, ich hätte 2 unterschiedliche Variablen nehmen können, ich dachte aber es wäre so eine gute Lösung. Anscheinend aber nicht...

Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
03.06.2008 um 22:24 Uhr
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:
01.
... 
02.
if defined NoInstDr goto :KeineDeinst 
03.
 
04.
echo Drucker vorhanden, gehe zur Deinstallation 
05.
call :DEINSTALLATION  
06.
goto :ENDE 
07.
 
08.
:KeineDeinst 
09.
REM Wenn kein Printer zum deinstallieren vorhanden ist 
10.
call :WRITELOG "Status NoInstDr: %NoInstDr%  Kein weiterer Drucker zu deinstallieren." 
11.
echo Drucker nicht vorhanden 
12.
goto :ENDE 
13.
 
14.
...
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Einen bestimmten Teil einer Textdatei auslesen
gelöst Frage von Focus1610Batch & Shell5 Kommentare

Hallo, ich brauche mal einen Denkanstoß. Ich bekomme per FTP von einem Kunden täglich mehrere Textdateien. Diese haben unterschiudlich ...

Batch & Shell
Batch datei.txt teile auslesen
gelöst Frage von yellyBirdBatch & Shell2 Kommentare

Hallo zusammen, ich bin realtiv neu hier und hätte eine kleine Frage: ich möchte mit einem batchfile aus einer ...

Windows Server
Druckernamen auf Terminalserver
Frage von MasterLutzWindows Server3 Kommentare

Hallo Forum, weil ich nicht mehr weiter komme, habe ich mich bei administrator.de angemeldet und möchte meine 1. Frage ...

Windows Server
Druckername wird nicht mit dem Freigabenamen angezeigt
gelöst Frage von CheliosWindows Server7 Kommentare

Hallo zusammen, Habe ein folgendes Problem: Die freigegeben Drucker am Druckerserver werden per Script am WTS beim einlogen hinzugefügt. ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 6 StundenInternet3 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registierunf von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 13 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 TagWindows 103 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless17 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...