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

Abfrage einer IP-Adresse und Vergleich mit IP-Adressen aus einer Excelliste

Mitglied: Flauschbobbel

Flauschbobbel (Level 1) - Jetzt verbinden

21.04.2008, aktualisiert 30.09.2008, 9745 Aufrufe, 28 Kommentare

Hallo ihr Spezialisten der Scripte,

ich kämpfe schon wieder als Neuling mit den Batch-Commands. Irgendwie krieg ich es nicht auf die Reihe. Hier mein Problem:

In meiner Registry habe ich in einem bestimmten Bereich viele Informationen über den aktuell installierten Clients, von welchen SW-Verteilserver er bedient wurde usw. Unter anderem auch die IP-Adresse des Clients, die SubnetMask, Router usw.
Zusätzlich habe ich nun noch eine Excel-Liste, in der die zu installierenden Drucker-IP-Adressen hinterlegt sind.

Die Excel Liste (.csv) ist in etwa wie folgt aufgebaut:

Standort-ID;bla;bla;IP-Adr1;IP-Adr2;IP-Adr3;IP-Adr4;bla
4711;bla;bla; 10.23.11.31 ; 10.23.11.32;---;---;bla
1234;bla;bla; 10.41.12.34 ; 10.41.12.45;---;---;bla
0815;bla;bla; 160.54.194.23 ; ---;---;---;bla
4342;bla;bla; 160.55.20.28 ;160.55.20.29;160.55.20.31;---;bla


Ich möchte nun folgendens tun:

- Abfragen, welche IP-Adresse hat mein Client (alle Clients habe statische IP-Adr.)

- Wenn mein Client in einem identischen Subnetz ist, wie die zu installierenden Drucker aus der Excelliste, dann sollen die Drucker installiert werden. (Als Beispiel mein Client am Standort 1234 hätte die IP 10.41.12.5, dann sollen auf diesem Client alle Drucker mit der IP 10.41.12.34 und 10.41.12.45 installiert werden. Ein weiterer Client am gleichen Standort mit der IP 10.41.12.6 soll ebenfalls alle Drucker mit der IP 10.41.12.34 und 10.41.12.45 erhalten.)

- Wenn mein Client NICHT in einem identischen Subnetz ist, wie die zu installierenden Drucker aus der Excelliste, dann installiere die Drucker nicht und beende das Script.

D.h. der Client muss meine komplette Liste (mit ca 900 Zeilen) durchgehen und jede Zeile Überprüfen, ob in dieser Zeile ein oder mehere Drucker-IP-Adressen stehen, die auf dem Client zu installieren sind.
In jeder Zeile dieser Excelliste können bis zu 4 IP-Adressen von zu installierenden Druckern stehen.
Das Script soll mittels SW-Verteilung (ManageSoft) auf alle Clients verteilt werden und auf allen Clients laufen.
Zusätzlich muss ich noch sicherstellen, dass, wenn das Script mehrmals verteilt wird zunächst prüft, ob auf diesem Client bereits der Drucker installiert wurde. Hier dachte ich daran, den installierten Standard TCP/IP-Port in der Registry abzufragen. Wenn der schon existiert, dann ist das Script gelaufen und kann sich beenden. Seht Ihr das auch so?

Das Installieren der Printer funktioniert soweit gut, ich kämpfe mit der obigen Abfrage und habe keinen richtigen Ansatz. Ich muss doch vermutlich auch noch auf Basis der Subnet-Mask errechnen in welchem Subnetz die Clients/Printer sind, oder? Es gibt ja noch die Netzmaske 255.255.255.128, usw.

Ich hoffe ihr habe eine Tip für mich?

Herzlichen Dank schon mal im Voraus!
Flauschbobbel
28 Antworten
Mitglied: bastla
21.04.2008 um 21:13 Uhr
Hallo Flauschbobbel!

Für erste Tests unter den einfachsten Voraussetzungen (nur eine IP-Adresse, Maske 255.255.255.0) etwa so:
01.
@echo off & setlocal
02.
set "Liste=D:\Druckerliste.csv"
03.
 
04.
::IP auslesen
05.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|findstr "IP-Ad"') do (
06.
	::IP zerlegen in %%a.%%b.%%c.%%d
07.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
08.
		::Drucker auslesen
09.
		for /f "tokens=1-8 delims=;" %%m in ('findstr "%%a.%%b.%%c." "%Liste%"') do (
10.
			::Drucker installieren
11.
			echo Installiere mit Daten: %%m %%n %%o %%p %%q %%r %%s %%t
12.
		)
13.
	)
14.
)
Für jede Zeile, in welcher passende IP-Adressen enthalten sind, wird der Teil "::Drucker installieren" (hier wird sich vermutlich ein Unterprogrammaufruf mit "call" anbieten) ausgeführt - wenn keine entsprechende Zeile gefunden wurde, wird dieser Teil gar nicht erreicht ...

Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
22.04.2008 um 18:57 Uhr
Hallo bastla,

ich habe mal an Deinem Vorschlag rumgespielt. (siehe beigefügtes Script)

- Wie kann ich denn die Variablen %%m %%n %%o %%p in das Unterprogramm für die Weiterverarbeitung übergeben?
Ich möchte die Variable in ipadr in den Unterprogrammen weiterverarbeiten.
- Zusätzlich suche ich noch nach einer Abfrage, wenn eine oder mehrere Variablen "leer" sind (%%n %%o %%p), also nur die erste Variable %%m eine IP-Adresse aus der Liste enthält, dann soll das Script weitermachen

Wenn ich es so mache wie in dem Beispiel von mir, zeigt er mir nicht den Inhalt der Variablen an:

01.
@echo off
02.
set "InputListe=D:\users\local\scripts\RO_TEST.csv"
03.
 
04.
::IP auslesen
05.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
06.
                ::IP zerlegen in %%a.%%b.%%c.%%d
07.
                for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
08.
 		::drucker auslesen
09.
 		for /f "tokens=10-14 delims=;" %%m in ('findstr "%%a.%%b.%%c." "%InputListe%"') do (
10.
 			:: Drucker installieren
11.
 			echo Installiere mit Daten %%m %%n %%o %%p
12.
 			call :DruckerInstall
13.
 		)
14.
 	)
15.
)
16.
 
17.
goto ende
18.
 
19.
:DruckerInstall
20.
echo Unterprogramm: Installiere mit Daten %%m %%n %%o %%p %%q %%r %%s %%t
21.
:: Drucker installieren
22.
set ipadr1=%%m
23.
echo IP1:%ipadr1%
24.
echo %%m
25.
set "ipadr2=%%n"
26.
echo IP2:%ipadr2%
27.
echo %%n
28.
set "ipadr3=%%o"
29.
echo IP3:%ipadr3%
30.
echo %%o
31.
set "ipadr4=%%p"
32.
echo IP4:%ipadr4%
33.
echo %%p
34.
echo Installiere mit Daten %%m %%n %%o %%p
35.
echo schluss unterprogramm
36.
goto :eof
37.
 
38.
goto irgendwohin
39.
echo test
40.
pause
41.
 
42.
:irgendwohin
43.
echo.
44.
:ende
45.
echo totales ende
46.
 
47.
set ipadr1=
48.
set ipadr2=
49.
set ipadr3=
50.
set ipadr4=

BTW, hast Du noch einen Tipp am Rande?:
Wie ist es möglich den Befehl während der Ausführung im Batch nicht zu sehen?
Der aufgeführte Befehl "REG QUERY..." wird trotz >>NUL angezeigt.

01.
@echo off
02.
:: Beispiel
03.
set IPPortName=IP_192.168.1.255
04.
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName% >>NUL
05.
echo %errorlevel%
Danke und viele Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
22.04.2008 um 20:39 Uhr
Hallo Flauschbobbel!

Falls es keinen besonderen Grund gibt, die 4 möglichen IP-Adressen getrennt zu speichern, bietet sich eine weitere Schleife an, in welcher jeweils eine der übergebenen Adressen verarbeitet wird:
01.
@echo off
02.
set "InputListe=D:\users\local\scripts\RO_TEST.csv"
03.
 
04.
::IP auslesen
05.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
06.
	::IP zerlegen in %%a.%%b.%%c.%%d
07.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
08.
		::drucker auslesen
09.
		for /f "tokens=10-14 delims=;" %%m in ('findstr "%%a.%%b.%%c." "%InputListe%"') do (
10.
			:: Drucker installieren
11.
			echo Installiere mit Daten %%m %%n %%o %%p
12.
			call :DruckerInstall "%%m %%n %%o %%p"
13.
 		)
14.
 	)
15.
)
16.
 
17.
goto ende
18.
 
19.
:DruckerInstall
20.
echo Unterprogramm: Installiere mit Daten %~1
21.
:: so viele Drucker installieren, wie Adressen vorhanden
22.
for %%i in (%~1) do (
23.
	echo Installiere IP: %%i
24.
)
25.
echo schluss unterprogramm
26.
goto :eof
27.
 
28.
:ende
29.
echo totales ende
Um dennoch allen %ipadrX% vorweg Werte zuzuweisen, müsste die "call"-Zeile ohne Anführungszeichen geschrieben werden und das Unterprogramm etwa so beginnen:
01.
if "%1" neq "" set ipadr1=%1
02.
if "%2" neq "" set ipadr2=%2
03.
...
Im weiteren Verlauf müsstest Du dann aber nochmals vor der Verwendung einer Variablen prüfen, ob ihr ein Wert zugewiesen wurde (wobei das für %ipadr1% eigentlich immer gelten sollte):
01.
if defined ipadr1 echo Installation mit IP: %ipadr1%
Zu Deinem Randproblem: Es sollte schon genügen, nach dem letzten %-Zeichen der Zeile das schließende Anführungszeichen zu setzen ...

Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
22.04.2008 um 21:05 Uhr
Hallo bastla,

es spricht nichts gegen Deinen Vorschlag eine weitere Schleife einzubauen, in welcher jeweils eine der übergebenen Adressen verarbeitet wird. Ich werde das mal so versuchen.

Zu meinem "Randproblem" habe ich noch eine Frage:
Ich habe die Anführungszeichen gesetzt, sorry hatte ich wohl übersehen, aber:
Wenn der RegistryKey NICHT vorhanden ist, dann wird die Befehlszeile "REG QUERY.... findstr /i "%IPPortName%" >>NUL " NICHT am Bildschirm angezeigt.
Ist der RegistryKey vorhanden, wird die Befehlszeile angezeigt.
Ich möchte aber, das die Befehlszeile in beiden Fällen nicht angezeigt wird.
Hast Du hierzu noch eine Idee?

Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
22.04.2008 um 21:16 Uhr
Hallo Flauschbobbel!

Wenn der RegistryKey NICHT vorhanden ist, dann wird die Befehlszeile ... NICHT am Bildschirm angezeigt.
Es kann gar nichts angezeigt werden, da ja "findstr" keine Ausgabe liefern kann, wenn es keine Zeile mit dem gesuchten Inhalt gibt, allerdings ...

Ist der RegistryKey vorhanden, wird die Befehlszeile angezeigt.
... kann ich das Problem (auch mit anderen Keys getestet) mit hinzugefügtem Anführungszeichen - die Zeile sieht dann so aus:
01.
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%" >>NUL
nicht nachvollziehen ...

Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
22.04.2008 um 21:27 Uhr
Hallo bastla,

Info zu meinem Randproblem:
Ich kann es nicht erklären. Aber obwohl meine Zeile identisch mit Deiner war, habe ich Deine Befehlszeile mittels copy/paste in mein script übernommen. Ergebnis: Es funktioniert!
Danke!

An Deinem anderen Vorschlag arbeite ich noch. Ich melde mich und gebe Feedback.

Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: Flauschbobbel
23.04.2008 um 20:07 Uhr
Hallo bastla,

wie kann ich in beigefügten Beispiel die Info von %~1 der Variable ipadr übergeben?
Bei den "echo Installiere IP %%i" wird die IP-Adresse noch einwandfrei angezeigt.
Ich möchte aber den Wert der Variable %ipadr% übergeben, siehe Beispiel.
Das funktioniert bei mir irgendwie nich korrekt. Die Variable ist zunächst leer.(sieh meinen ersten "echo %ipadr%" -Befehl)
Im weiteren Verlauf des Scripts, also z.B. im Unterprogramm ist sie aber richtig gesetzt.
Kannst Du mir das erklären?

Zusätzlich möchte ich, dass zunächst alle IP-Adressen der Drucker (max 4) in der entsprechenden Zeile geprüft werden, ob
die IP-Adresse bzw. der TCP/IP-Port in der Registry schon existiert, dass sich mein Script dann
sofort beendet (weil ich dann annehmen muss, dass das Script schon mal gelaufen ist und die Ports in der Registry angelegt hat).
Wenn ggf eine IP-Adresse nicht vorhanden ist, dann soll sie natürlich installiert werden.
Kannst Du mir hier einen Ansatz geben? Mein Beispiel funktioniert noch nicht richtig, denn selbst wenn der IP-Port vorhanden ist, versucht
mein Script trotzdem immer noch die Installation. Wie kann ich das realisieren?

Danke und viele Grüße,
Flauschbobbel

01.
@echo off
02.
 
03.
set "InputListe=D:\users\local\scripts\RO_TEST.csv"
04.
 
05.
::IP auslesen
06.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
07.
	::IP zerlegen in %%a.%%b.%%c.%%d
08.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
09.
		::Drucker auslesen
10.
		for /f "tokens=10-14 delims=;" %%m in ('findstr "%%a.%%b.%%c." "%InputListe%"') do (
11.
			:: Drucker installieren
12.
			echo Installiere mit Daten %%m %%n %%o %%p >>NUL
13.
			call :ProcessLine "%%m %%n %%o %%p"
14.
		)
15.
	)
16.
)
17.
 
18.
goto ende
19.
 
20.
:ProcessLine
21.
echo Unterprogramm: Installiere mit Daten %~1
22.
:: so viele Drucker installieren, wie Adressen vorhanden
23.
for %%i in (%~1) do (
24.
	echo Installiere IP %%i
25.
 
26.
	set ipadr=
27.
	set IPPortName=
28.
 
29.
	set "ipadr=%%i" 
30.
	set "IPPortName=IP_%%i"
31.
 
32.
:: BEI DIESEM ECHO IST DIE VARIABLE LEER
33.
	echo %ipadr%
34.
	echo %IPPortName%
35.
 
36.
	call :Check_IP
37.
	call :Installiere
38.
)
39.
echo schluss unterprogramm
40.
goto :eof
41.
 
42.
goto ende
43.
 
44.
:Check_IP
45.
	echo check IP...
46.
:: BEI DIESEM ECHO SIND DIE VARIABLEN RICHTIG GESETZT. Warum??
47.
	echo %ipadr%
48.
	echo %IPPortName%
49.
 
50.
	REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%" >>NUL
51.
	if %errorlevel%==0 (
52.
		echo %errorlevel%
53.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% bereits eingetragen 	
54.
	 	echo %date% %time% - %LINE%							
55.
 		goto :eof
56.
	) else (
57.
	 	echo %errorlevel%
58.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 
59.
	)
60.
 
61.
	echo. 										
62.
	goto :eof
63.
 
64.
 
65.
:Installiere
66.
	echo installiere...
67.
:: BEI DIESEM ECHO SIND DIE VARIABLEN RICHTIG GESETZT. Warum??
68.
	echo %ipadr%
69.
	echo %IPPortName%
70.
	goto :eof
71.
 
72.
:ende
73.
echo totales ende
74.
	set ipadr=
75.
	set IPPortName=
76.
 
Bitte warten ..
Mitglied: bastla
23.04.2008 um 21:54 Uhr
Hallo Flauschbobbel!

Ich möchte aber den Wert der Variable %ipadr% übergeben, siehe Beispiel.
Das tust Du ja auch - es kann nur innerhalb der Schleife ohne "verzögerte Variablenauflösung" / "delayedexpansion" der neue Wert (noch) nicht verwendet werden - aber Du hast ja, wenn tatsächlich der Bedarf besteht, innerhalb der Schleife ohnehin mit %%i die IP-Adresse zur Verfügung.
Zur "delayedexpansion": Bei Schleifen wird der Wert von Variablen grundsätzlich nur zu Beginn ermittelt, sodass eine Änderung des Wertes einer Variablen (inkludiert das Zuweisen eines Wertes zu einer neuen Variablen wie in Deinem Beispiel) nicht "bemerkt" wird.

Es gibt zwar die Möglichkeit, mit "setlocal enabledelayedexpansion" zu erzwingen, dass jede Variable auch innerhalb der Schleife nicht bereits am Anfang, sondern "verzögert" aufgelöst wird (und damit tatsächlich den aktuellen Wert liefert), allerdings hat diese Funktionalität eine Nebenwirkung: Da Variablen in diesem Fall nicht mehr in der Form %Variable%, sondern als !Variable! zu schreiben sind, wird das "!" zum Sonderzeichen und daher innerhalb von Texten nicht mehr als "gewöhnliches" Zeichen interpretiert und verschwindet ganz einfach. Beispiel:
01.
@echo off & setlocal enabledelayedexpansion
02.
for %%i in (Ohne Rufzeichen! ausgegeben.) do (
03.
        set "Text=%%i"
04.
        echo !Text!
05.
)
Selbst wenn Du ziemlich sicher sein solltest, dass in Deinem Batch daraus kein Problem entstünde, brauchst Du die "delayedexpansion" eigentlich nicht (siehe oben).
Im weiteren Verlauf des Scripts, also z.B. im Unterprogramm ist sie aber richtig gesetzt.
Kannst Du mir das erklären?
Beim Aufruf eines Unterprogrammes wird eine neue CMD-Instanz gestartet, und hier ist dann der neue Variablenwert bereits "bekannt".

Mein Beispiel funktioniert noch nicht richtig, denn selbst wenn der IP-Port vorhanden ist, versucht mein Script trotzdem immer noch die Installation.
Du prüfst zwar im Unterprogramm "Check_IP", gibst aber das Ergebnis nicht an das Hauptprogramm zurück, sodass ":Installiere" auf jeden Fall ausgeführt wird. Abhilfe kann hier eine "Schalter"-Variable schaffen - diese wird zunächst gesetzt, und, wenn im Unterprogramm die IP gefunden wird, gelöscht. Nach der Rückkehr ins Hauptprogramm ist dann am Zustand dieser Variablen ("defined" oder "not defined") das Ergebnis der Überprüfung abzulesen:
01.
set "Inst=True"
02.
call :Check_IP
03.
if defined Inst call :Installiere
04.
...
05.
 
06.
:Check_IP
07.
...
08.
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%">NUL && set Inst=
09.
...
10.
goto :eof


Etwas reduziert könnte der Batch dann bis hierher so aussehen:
01.
@echo off & setlocal
02.
set "InputListe=D:\users\local\scripts\RO_TEST.csv"
03.
 
04.
::IP auslesen
05.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
06.
	::IP zerlegen in %%a.%%b.%%c.%%d
07.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
08.
		::Drucker auslesen
09.
		for /f "tokens=10-14 delims=;" %%m in ('findstr "%%a.%%b.%%c." "%InputListe%"') do (
10.
			:: Drucker installieren
11.
			echo Installiere mit Daten %%m %%n %%o %%p >>NUL
12.
			call :ProcessLine "%%m %%n %%o %%p"
13.
		)
14.
	)
15.
)
16.
 
17.
goto :ende
18.
 
19.
:ProcessLine
20.
echo Unterprogramm: Installiere mit Daten %~1
21.
:: so viele Drucker installieren, wie Adressen vorhanden
22.
for %%i in (%~1) do (
23.
	echo Bearbeite IP: %%i
24.
 
25.
	set "ipadr=%%i" 
26.
	set "IPPortName=IP_%%i"
27.
	::Schalter setzen
28.
	set "Inst=True"
29.
	
30.
	call :Check_IP
31.
	::nur bei noch gesetztem Schalter installieren
32.
	if defined Inst call :Installiere
33.
)
34.
echo schluss unterprogramm
35.
goto :eof
36.
 
37.
:Check_IP
38.
echo check IP...
39.
 
40.
::Falls die IP in der Registry gefunden wird, "Inst"-Schalter loeschen
41.
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%">NUL && set Inst=
42.
if not defined Inst (
43.
	echo %date% %time% - Standard TCP/IP-Port %IPPortName% bereits eingetragen 	
44.
 	echo %date% %time% - %LINE%							
45.
) else (
46.
	echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 
47.
)
48.
echo\
49.
goto :eof
50.
 
51.
:Installiere
52.
echo installiere...
53.
 
54.
echo %ipadr%
55.
echo %IPPortName%
56.
 
57.
goto :eof
58.
 
59.
:ende
60.
echo totales ende
Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
24.04.2008 um 16:21 Uhr
Hallo bastla,

ich habe bei Deinem Vorschlag noch ein Problem:
Wenn in meiner csv-Datei die IP-Adressen wie folgt eingetragen sind (sollte zwar nicht vorkommen, aber ich möchte das als Fehler abfangen),

... ;192.168.1.225;193.168.1.226;193.168.1.255;; ...
... ;10.168.1.225;10.168.1.226;192.168.1.255;; ...

dann werden trotzdem alle 3 IP-Adressen installiert, obwohl der Client die IP-Adresse 192.168.1.30 hat.
Ich hatte es so verstanden, dass wenn der Client die IP 192.168.1.xxx hat, auch nur alle Printer mit der 192.168.1.xxx
installiert werden. Dann dürften nach meinem Verständnis die Drucker mit der IP 193.xxx.xxx.xxx aus der Liste nicht installiert werden.

Daran schliesst sich mein nächstes Problem an:
In der Liste können Einträge wie z.B.

... ;192.168.1.225;beantragt;;; ...

vorkommen. Dann legt das Script einen TCP/IP-Port in der Registry mit "IP_beantragt" an
und dementsprechend einen Printer mit dem Namen beantragt an.

Hast Du noch einen Tip zu folgender Idee vob mir:
Wenn der IP-Port in der Registry nicht (oder nicht mehr) existiert, aber der Drucker unter "Drucker und Faxgeräte"
noch vorhanden ist, dann sollte der IP-Port installiert werden. Es könnte sein, dass die Installation ursprünglich sauber
gelaufen ist, aber irgendjemand den IP-Port in der Registry gelöscht hat.
Wie kann ich das bei der Abfrage realisieren?
Wenn der IP-Port existiert und der Printer installiert ist => alles OK, weiter zum nächsten
Wenn der IP-Port existiert und der Printer nicht istalliert ist => nur Printer installieren
Wenn der IP-Port nicht existiert und der Printer installiert ist => nur IP-Port installieren/eintragen in der Registry

Kannst Du mir noch einen Tip geben für was "echo\" steht? Was bedeutet der "\"?

Danke und viele Grüße,
Flauschbobbel


01.
 
02.
@echo off & setlocal
03.
 
04.
set "InputListe=D:\users\local\scripts\RO_TEST.csv"
05.
 
06.
::IP auslesen
07.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
08.
	::IP zerlegen in %%a.%%b.%%c.%%d
09.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
10.
		::Drucker auslesen
11.
		for /f "tokens=10-14 delims=;" %%m in ('findstr "%%a.%%b.%%c." "%InputListe%"') do (
12.
			:: Drucker installieren
13.
			echo Installiere mit Daten %%m %%n %%o %%p >>NUL
14.
			call :ProcessLine "%%m %%n %%o %%p"
15.
		)
16.
	)
17.
)
18.
 
19.
goto ende
20.
 
21.
:ProcessLine
22.
echo Unterprogramm: Installiere mit Daten %~1
23.
:: so viele Drucker installieren, wie Adressen vorhanden
24.
for %%i in (%~1) do (
25.
	echo Bearbeite IP %%i
26.
 
27.
	set "ipadr=%%i" 
28.
	set "IPPortName=IP_%%i"
29.
	::Schalter setzen
30.
	set "Inst=True"
31.
 
32.
	call :Check_IP
33.
	::nur bei noch gesetztem Schalter installieren
34.
	if defined Inst call :Installiere
35.
)
36.
echo schluss unterprogramm
37.
goto :eof
38.
 
39.
:Check_IP
40.
	echo check IP...
41.
 
42.
:: Falls die IP in der Registry gefunden wird, "Inst"-Schalter loeschen
43.
	REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%" >>NUL && set Inst=
44.
 
45.
	if not defined Inst (
46.
		echo %errorlevel%
47.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% bereits eingetragen 	
48.
	 	echo %date% %time% - %LINE%							
49.
 		goto :eof
50.
	) else (
51.
	 	echo %errorlevel%
52.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 
53.
	)
54.
 
55.
	echo\ 										
56.
	goto :eof
57.
 
58.
:Installiere
59.
echo installiere...
60.
	echo %ipadr%
61.
	echo %IPPortName%
62.
	goto :eof
63.
 
64.
:ende
Bitte warten ..
Mitglied: Flauschbobbel
27.04.2008 um 18:48 Uhr
Hallo Zusammen,

hat jemand eine Idee die mir weiterhelfen könnte?

Danke schon mal im Voraus.
Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: Biber
27.04.2008 um 19:49 Uhr
Moin flauschbobbel,

zu ein oder zwei Teilproblemen hätte ich Tipps.

Die Hauptprobleme mit der "gültigen" IP-Adresse solltest Du so abstellen können:
ÄNDERE: ...'findstr "%%a.%%b.%%c." ...
SETZE: ...'findstr /C:"%%a.%%b.%%c."

Zitat aus "Findstr /?" :
/C:Zeichenfolge Sucht nach Zeichenfolge buchstabengetreu.
Momentan wird offensichtlich nach "%%a" und [beliebigesZeichen] und %%b und [beliebigesZeichen] und %%c und [beliebigesZeichen]" gesucht.
Trifft ja auch manchmal...

Der "Echo\"-Befehl gibt eine leere Zeile aus.
Genauer gesagt würde ein "Echo" ohne Parameter ja nur eine Statusmeldung "ECHO ist an"/"ECHO ist aus". liefern - ebenso ein "Echo [Leerzeichen]".
Umgehen kann man/frau das seit knapp 100 Jahren undokumentiert, aber verlässlich seit DOS 2.11,
indem direkt nach dem Wort "ECHO" eines der Zeichen . \ / ? : , ; [ ] eingeben wird.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
27.04.2008 um 22:24 Uhr
Hallo Flauschbobbel!

Vorweg: Sorry - hatte leider Deinen Beitrag vom Donnerstag nicht mitbekommen ...

Dass zu viele Ports installiert werden, liegt daran, dass jede Zeile nur daraufhin untersucht wird, ob mindestens eine der enthaltenen IP-Adressen im Netz des Rechners liegt - diese Abfrage muss dann aber auch noch für jede einzelne Adresse durchgeführt werden (ist im Entwurf unten jetzt berücksichtigt).

Das Thema "Drucker da, Port aber nicht" muss ich leider etwas vertagen ...

Wie Biber schon angemerkt hat, kann anstelle von "echo." mit gleichem Erfolg auch "echo\" geschrieben werden - zu letzterer Schreibweise bin ich übergegangen, nachdem ich von Problemen mit der "."-Schreibweise gelesen hatte ...
Neuer Entwurf:
01.
@echo off & setlocal
02.
set "InputListe=D:\users\local\scripts\RO_TEST.csv"
03.
 
04.
::IP auslesen
05.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
06.
	::IP zerlegen in %%a.%%b.%%c.%%d
07.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
08.
		::Drucker auslesen
09.
		for /f "tokens=10-14 delims=;" %%m in ('findstr /C:"%%a.%%b.%%c." "%InputListe%"') do (
10.
			:: Drucker installieren
11.
			echo Installiere mit Daten %%m %%n %%o %%p >>NUL
12.
			::Zweiter Parameter = Netzanteil der IP-Adresse des aktuellen Rechners 
13.
			call :ProcessLine "%%m %%n %%o %%p" "%%a.%%b.%%c."
14.
		)
15.
	)
16.
)
17.
 
18.
goto :ende
19.
 
20.
:ProcessLine
21.
echo Unterprogramm: Installiere mit Daten %~1
22.
:: so viele Drucker installieren, wie Adressen vorhanden
23.
for %%i in (%~1) do (
24.
	echo Bearbeite IP %%i
25.
	::Adresse in IP-Range?
26.
	echo %%i|findstr /C:%2 >nul && (
27.
		set "ipadr=%%i" 
28.
		set "IPPortName=IP_%%i"
29.
		::Schalter setzen
30.
		set "Inst=True"
31.
 
32.
		call :Check_IP
33.
		::nur bei noch gesetztem Schalter installieren
34.
		if defined Inst call :Installiere
35.
	)
36.
)
37.
echo schluss unterprogramm
38.
goto :eof
39.
 
40.
:Check_IP
41.
	echo check IP...
42.
 
43.
:: Falls die IP in der Registry gefunden wird, "Inst"-Schalter loeschen
44.
	REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%" >NUL && set Inst=
45.
 
46.
	if not defined Inst (
47.
		echo %errorlevel%
48.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% bereits eingetragen 	
49.
	 	echo %date% %time% - %LINE%							
50.
) else (
51.
	 	echo %errorlevel%
52.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 
53.
)
54.
 
55.
	echo\ 										
56.
	goto :eof
57.
 
58.
:Installiere
59.
echo installiere...
60.
echo %ipadr%
61.
echo %IPPortName%
62.
goto :eof
63.
 
64.
:ende
Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
28.04.2008 um 20:00 Uhr
Hallo bastla, hallo biber,

vielen Dank zunächst für Eure Unterstützung. bastla, ich habe Deinen Vorschlag soweit umgesetzt und bin recht zufrieden mit dem bisherigen Ergebnis. Nun hat sich heute aber ein neues Problem hierbei ergeben. Ich habe unterschiedliche Subnet-Masks
in meinen verschiedenen Lokationen. Bsp.:

Lokation A: Subnet Mask 255.255.255.0
Lokation B: Subnet Mask 255.255.255.128
In meiner Excelliste (.csv) werde ich eine entsprechende Spalte anlegen, in der die Subnetmask der jeweiligen Lokation hervorgeht. Bsp:

... ;SubnetMask;IP1;IP2;IP3;IP4;; ...
... ;255.255.255.0;192.168.1.225;193.168.1.226;193.168.1.255;; ...
... ;255.255.255.128;10.168.1.225;10.168.1.226;192.168.1.255;; ...

Aber, wie muss ich denn die Abfrage gestalten, wenn ich auch hier nach der entsprechenden Subnet-Masks abfragen muss?
(Muss ich das denn überhaupt, denn ich bin ja mit meinem im gleichen Subnetz, oder?)
Kann man die bisherige Abfrage miteinander verbinden oder muss man getrennt danach fragen?


01.
@echo off & setlocal
02.
set "InputListe=D:\users\local\scripts\RO_TEST.csv"
03.
 
04.
::IP auslesen
05.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
06.
	::IP zerlegen in %%a.%%b.%%c.%%d
07.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
08.
		::Drucker auslesen
09.
		for /f "tokens=10-14 delims=;" %%m in ('findstr /C:"%%a.%%b.%%c." "%InputListe%"') do (
10.
			:: Drucker installieren
11.
			echo Installiere mit Daten %%m %%n %%o %%p >>NUL
12.
			::Zweiter Parameter = Netzanteil der IP-Adresse des aktuellen Rechners 
13.
			call :ProcessLine "%%m %%n %%o %%p" "%%a.%%b.%%c."
14.
		)
15.
	)
16.
)
17.
 
18.
goto :ende
19.
 
20.
:ProcessLine
21.
echo Unterprogramm: Installiere mit Daten %~1
22.
:: so viele Drucker installieren, wie Adressen vorhanden
23.
for %%i in (%~1) do (
24.
	echo Bearbeite IP %%i
25.
	::Adresse in IP-Range?
26.
	echo %%i|findstr /C:%2 >nul && (
27.
		set "ipadr=%%i" 
28.
		set "IPPortName=IP_%%i"
29.
		::Schalter setzen
30.
		set "Inst=True"
31.
 
32.
		call :Check_IP
33.
		::nur bei noch gesetztem Schalter installieren
34.
		if defined Inst call :Installiere
35.
	)
36.
)
37.
echo schluss unterprogramm
38.
goto :eof
39.
 
40.
:Check_IP
41.
	echo check IP...
42.
 
43.
:: Falls die IP in der Registry gefunden wird, "Inst"-Schalter loeschen
44.
	REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%" >NUL && set Inst=
45.
 
46.
	if not defined Inst (
47.
		echo %errorlevel%
48.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% bereits eingetragen 	
49.
	 	echo %date% %time% - %LINE%							
50.
) else (
51.
	 	echo %errorlevel%
52.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 
53.
)
54.
 
55.
	echo\ 										
56.
	goto :eof
57.
 
58.
:Installiere
59.
echo installiere...
60.
echo %ipadr%
61.
echo %IPPortName%
62.
goto :eof
63.
 
64.
:ende
65.
 

Hast Du zum Thema "Drucker da, Port aber nicht" zumindest eine grobe Idee?
Mein Gedanke war:

Wenn der IP-Port in der Registry nicht (oder nicht mehr) existiert, aber der Drucker unter "Drucker und Faxgeräte"
noch vorhanden ist, dann sollte der IP-Port installiert werden. Es könnte sein, dass die Installation ursprünglich sauber
gelaufen ist, aber irgendjemand den IP-Port in der Registry gelöscht hat.
Wie kann ich das bei der Abfrage realisieren?
Wenn der IP-Port existiert und der Printer installiert ist => alles OK, weiter zum nächsten
Wenn der IP-Port existiert und der Printer nicht istalliert ist => nur Printer installieren
Wenn der IP-Port nicht existiert und der Printer installiert ist => nur IP-Port installieren/eintragen in der Registry


Und zum guten Schluß habe ich noch ein "kosmetisches Problem" mit der Logfiles meines Scripts:
Wie Du im nachfolgenden Ausschnitt aus meinem Logfile siehst, habe ich nach den REG ADD-Befehlen (die ich mittes
einem echo-Befehl einfach nur im Logfile zur Dokumentation anzeigen will) und
der Meldung "Der Vorgang wurde erfolgreich ausgeführt." (die Meldung kommt ja vom System) jeweils eine Leerzeile.
Ebenso beim Befehl net stop Spooler. Lässt sich das beim Schreiben des Logfiles irgendwie umgehen?

01.
---- Ausschnitt aus dem Original-Logfile -----
02.
									
03.
28.04.2008 11:10:15,00 - Standard TCP/IP-Port IP_192.168.1.244 in die Registry eintragen... 
04.
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" 							
05.
 
06.
Der Vorgang wurde erfolgreich ausgeführt.
07.
28.04.2008 11:10:15,04 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v Protocol /t REG_DWORD /d 00000001 	
08.
 
09.
Der Vorgang wurde erfolgreich ausgeführt.
10.
28.04.2008 11:10:15,09 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v Version /t REG_DWORD /d 00000001 	
11.
 
12.
Der Vorgang wurde erfolgreich ausgeführt.
13.
28.04.2008 11:10:15,14 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v HostName /t REG_SZ /d "" 		
14.
 
15.
Der Vorgang wurde erfolgreich ausgeführt.
16.
28.04.2008 11:10:15,18 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v IPAddress /t REG_SZ /d 192.168.1.244 	
17.
 
18.
Der Vorgang wurde erfolgreich ausgeführt.
19.
28.04.2008 11:10:15,25 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v HWAddress /t REG_SZ /d "" 		
20.
 
21.
Der Vorgang wurde erfolgreich ausgeführt.
22.
28.04.2008 11:10:15,29 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v PortNumber /t REG_DWORD /d 9100 	
23.
 
24.
Der Vorgang wurde erfolgreich ausgeführt.
25.
28.04.2008 11:10:15,34 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v "SNMP Community" /t REG_SZ /d "public" 
26.
 
27.
Der Vorgang wurde erfolgreich ausgeführt.
28.
28.04.2008 11:10:15,39 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v "SNMP Enabled" /t REG_DWORD /d 00000001 
29.
 
30.
Der Vorgang wurde erfolgreich ausgeführt.
31.
28.04.2008 11:10:15,45 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v "SNMP Index" /t REG_DWORD /d 00000001 
32.
 
33.
Der Vorgang wurde erfolgreich ausgeführt.
34.
28.04.2008 11:10:15,50 - Druckerwarteschlage anhalten... 				
35.
28.04.2008 11:10:15,50 - net stop spooler 							
36.
 
37.
Druckwarteschlange wurde erfolgreich beendet.
38.
 
39.
28.04.2008 11:10:15,62 - Druckerwarteschlage starten... 				
40.
28.04.2008 11:10:15,64 - net start spooler 						
41.
Druckwarteschlange wird gestartet.
42.
Druckwarteschlange wurde erfolgreich gestartet.
43.
 
44.
---- Ende Ausschnitt aus dem Original-Logfile -----


Hier das Skript zu obigem Output:

01.
---- Ausschnitt (der Upnterprogramme) aus dem Original-Skript ----- 
02.
...
03.
 
04.
:: ----------------------------------------------------------------------
05.
:CREATE_TCPIP_PORT
06.
:: ----------------------------------------------------------------------
07.
 
08.
::  	Standard TCP/IP-Port in die Registry eintragen 
09.
 
10.
	echo %date% %time% - Standard TCP/IP-Port %IPPortName% in die Registry eintragen... >> %AddPrntLog%
11.
	echo REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" 							>> %AddPrntLog%
12.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" 								>> %AddPrntLog%
13.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v Protocol /t REG_DWORD /d 00000001 	>> %AddPrntLog%
14.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v Protocol /t REG_DWORD /d 00000001 			>> %AddPrntLog%
15.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v Version /t REG_DWORD /d 00000001 	>> %AddPrntLog%
16.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v Version /t REG_DWORD /d 00000001 			>> %AddPrntLog%
17.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v HostName /t REG_SZ /d "" 		>> %AddPrntLog%
18.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v HostName /t REG_SZ /d "" 				>> %AddPrntLog%
19.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v IPAddress /t REG_SZ /d %ipadr% 	>> %AddPrntLog%
20.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v IPAddress /t REG_SZ /d %ipadr% 				>> %AddPrntLog%
21.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v HWAddress /t REG_SZ /d "" 		>> %AddPrntLog%
22.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v HWAddress /t REG_SZ /d "" 				>> %AddPrntLog%
23.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v PortNumber /t REG_DWORD /d 9100 	>> %AddPrntLog%
24.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v PortNumber /t REG_DWORD /d 9100 			>> %AddPrntLog%
25.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Community" /t REG_SZ /d "public" >> %AddPrntLog%
26.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Community" /t REG_SZ /d "public" 			>> %AddPrntLog%
27.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Enabled" /t REG_DWORD /d 00000001 >> %AddPrntLog%
28.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Enabled" /t REG_DWORD /d 00000001 		>> %AddPrntLog%
29.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Index" /t REG_DWORD /d 00000001 >> %AddPrntLog%
30.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Index" /t REG_DWORD /d 00000001 			>> %AddPrntLog%
31.
	goto :eof
32.
 
33.
:: ----------------------------------------------------------------------
34.
:STOP_START_SPOOLER
35.
:: ----------------------------------------------------------------------
36.
 
37.
:: 	Druckerwarteschlange anhalten/starten
38.
 
39.
	echo %date% %time% - Druckerwarteschlage anhalten... 				>> %AddPrntLog%
40.
	echo %date% %time% - net stop spooler 						>> %AddPrntLog%	
41.
	net stop spooler 								>> %AddPrntLog%
42.
	if %errorlevel% == 2 echo Druckerwarteschlange bereits gestoppt 		>> %AddPrntLog%
43.
	echo %date% %time% - Druckerwarteschlage starten... 				>> %AddPrntLog%
44.
	echo %date% %time% - net start spooler 						>> %AddPrntLog%
45.
	net start spooler 								>> %AddPrntLog%
46.
	goto :eof
47.
 
48.
...
49.
---- Ende Ausschnitt aus dem Original-Skript -----


Ich hätte gerne die Ausgabe wie folgt:
01.
28.04.2008 11:10:15,00 - Standard TCP/IP-Port IP_192.168.1.244 in die Registry eintragen... 
02.
28.04.2008 11:10:15,00 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" 							
03.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
04.
28.04.2008 11:10:15,04 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v Protocol /t REG_DWORD /d 00000001 	
05.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
06.
28.04.2008 11:10:15,09 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v Version /t REG_DWORD /d 00000001 	
07.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
08.
28.04.2008 11:10:15,14 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v HostName /t REG_SZ /d "" 		
09.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
10.
28.04.2008 11:10:15,18 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v IPAddress /t REG_SZ /d 192.168.1.244 	
11.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
12.
28.04.2008 11:10:15,25 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v HWAddress /t REG_SZ /d "" 		
13.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
14.
28.04.2008 11:10:15,29 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v PortNumber /t REG_DWORD /d 9100 	
15.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
16.
28.04.2008 11:10:15,34 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v "SNMP Community" /t REG_SZ /d "public" 
17.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
18.
28.04.2008 11:10:15,39 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v "SNMP Enabled" /t REG_DWORD /d 00000001 
19.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
20.
28.04.2008 11:10:15,45 - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.1.244" /v "SNMP Index" /t REG_DWORD /d 00000001 
21.
28.04.2008 11:10:15,00 - Der Vorgang wurde erfolgreich ausgeführt.
22.
28.04.2008 11:10:15,50 - Druckerwarteschlage anhalten... 				
23.
28.04.2008 11:10:15,50 - net stop spooler 							
24.
28.04.2008 11:10:15,00 - Druckwarteschlange wurde erfolgreich beendet.
25.
28.04.2008 11:10:15,62 - Druckerwarteschlage starten... 				
26.
28.04.2008 11:10:15,64 - net start spooler 						
27.
28.04.2008 11:10:15,00 - Druckwarteschlange wird gestartet.
28.
28.04.2008 11:10:15,00 - Druckwarteschlange wurde erfolgreich gestartet.
Gibt es da vielleicht eine Möglichkeit?


Sorry, wenn ich noch ein Anliegen habe:
Ich möchte zuvor abfragen ob die 2 benötigten Unterverzeichnisse \DrvPS und \DrvPCL6 vorhanden sind.
Wenn sie vorhanden sind, dann soll irgendwas passieren, wenn eins von beiden oder beide fehlen, dann soll das Script beendet werden.
Aber so funktioniert es irgendwie nicht richtig. Kannst Du mir hier auch nochmals unter die Arme greifen?

01.
@echo off
02.
	set scriptdir=%~dp0
03.
::	Prüfen ob die notwendigen Installationsverzeichnisse vorhanden sind
04.
if not exist %scriptdir%\DrvPS\ echo ERROR: Verzeichnis %scriptdir%\DrvPS\ nicht vorhanden!
05.
if not exist %scriptdir%\DrvPCL6\ (
06.
	echo ERROR: Verzeichnis %scriptdir%\DrvPCL6\ nicht vorhanden!
07.
	goto ende
08.
)
09.
:IRGENDWAS
10.
echo verzeichnisse sind da
11.
pause
12.
 
13.
:ENDE
14.
echo schluss

Danke und viele Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
28.04.2008 um 21:32 Uhr
Hallo Flauschbobbel!

Fangen wir mit der Kosmetik an: Um die von Dir gewünschte Ausgabe (annähernd) zu erreichen, musst Du selbst die erforderlichen Meldungen hinsichtlich des Erfolges (auf Basis des Errorlevels) erstellen (ggf den Errrolevel in einer anderen Variable zwischenspeichern):
01.
	echo %date% %time% - Standard TCP/IP-Port %IPPortName% in die Registry eintragen... >> %AddPrntLog%
02.
	echo %date% %time% - REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" >> %AddPrntLog%
03.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" >nul 2>&1
04.
	if %errorlevel%==0 (
05.
		echo %date% %time% - Der Vorgang wurde erfolgreich ausgeführt. 	>> %AddPrntLog%
06.
	) else (
07.
		echo %date% %time% - Der Vorgang wurde mit Fehler %errorlevel% beendet. >> %AddPrntLog%
08.
	)
09.
 
10.
:: and so on ...
11.
	
12.
	echo %date% %time% - Druckwarteschlage anhalten... 				>> %AddPrntLog%
13.
	echo %date% %time% - net stop spooler 						>> %AddPrntLog%	
14.
	net stop spooler >nul 2>&1
15.
	if %errorlevel%==0 echo %date% %time% - Druckwarteschlange wurde erfolgreich beendet. >> %AddPrntLog%
16.
	if %errorlevel%==2 echo %date% %time% - Druckwarteschlange bereits gestoppt 		>> %AddPrntLog%
17.
	echo %date% %time% - Druckwarteschlage starten... 				>> %AddPrntLog%
18.
	echo %date% %time% - net start spooler 						>> %AddPrntLog%
19.
	net start spooler >nul 2>&1
20.
	if %errorlevel%==0 echo %date% %time% - Druckwarteschlange wurde erfolgreich gestartet. >> %AddPrntLog%
Das Prüfen der Unterverzeichnisse könnte etwa so aussehen:
01.
@echo off & setlocal
02.
set "scriptdir=%~dp0"
03.
::	Prüfen ob die notwendigen Installationsverzeichnisse vorhanden sind
04.
set OK=True
05.
if not exist "%scriptdir%\DrvPS\" (
06.
	echo ERROR: Verzeichnis %scriptdir%\DrvPS\ nicht vorhanden!
07.
	set OK=
08.
)
09.
if not exist "%scriptdir%\DrvPCL6\" (
10.
	echo ERROR: Verzeichnis %scriptdir%\DrvPCL6\ nicht vorhanden!
11.
	set OK=
12.
)
13.
if not defined OK goto :ende
14.
 
15.
:IRGENDWAS
16.
echo verzeichnisse sind da
17.
pause
18.
 
19.
:ENDE
20.
echo schluss
Was den Rest anlangt, muss ich Dich noch vertrösten ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
28.04.2008 um 22:15 Uhr
... aber wenn Du durchwegs XP-Rechner hast, könntest Du zwischenzeitlich zB die Informationen aus
01.
wmic printer get DeviceID, DriverName
auf Verwertbarkeit prüfen.

Weitere abrufbare Eigenschaften findest Du über
01.
wmic printer list /?
Grüße
bastla
Bitte warten ..
Mitglied: bastla
29.04.2008 um 10:26 Uhr
Hallo Flauschbobbel!

Noch eine Frage zu den "Subnet Masks" - genügt es, wenn ich von einer Adressierung ab /24 (also erste 3 Stellen sind immer "255.255.255") ausgehe?

Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
29.04.2008 um 16:50 Uhr
Hallo bastla,

ja, ich denke es genügt wenn Du von einer Adressierung ab /24 (also erste 3 Stellen sind immer "255.255.255") ausgehst.
Ich habe die aktuelle Liste mit den einzelnen SubnetMask noch nicht. Kann man das ggf später noch anpassen?
Sorry, aber ich arbeite nur in einem Teilsegment und habe noch nicht den kompletten Überblick, da ich erst vor
kurzem im Unternehmen angefangen habe.

Ebenfalls sorry für meine verspätete Antwort, ich war auf einer geschäftlichen Veranstaltung und konnte erst eben meine Emails checken.

Danke für Deinen Tip. Habe mit wmic mal rumgespielt (siehe Abschnitt CHECK_PRINTER) und bin recht zufrieden,
bis auf ein kleines Problem:

Hier mein kleines Szenario (Habe als Beispiel nur eine Zeile aus meiner Excelliste herausgenommen):
IP-Ports in der Registry: IP_192.168.1.225, IP_192.168.1.226 und IP_192.168.1.255
Die Druckernamen setzen sich zusammen aus Drucker_Schalter_<ipadr>, in dem Beispiel also Drucker_Schalter_192.168.1.225,
Drucker_Schalter_192.168.1.226 und Drucker_Schalter_192.168.1.255

Ist kein Drucker und kein IP-Port vorhanden werden Drucker und IP-Port auf Basis meiner Excelliste (.csv) einwandfrei installiert.
Im Beispiel also
Drucker_Schalter_192.168.1.225 zum IP-Port IP_192.168.1.225
Drucker_Schalter_192.168.1.226 zum IP-Port IP_192.168.1.226
Drucker_Schalter_192.168.1.255 zum IP-Port IP_192.168.1.255

Ist der IP-Port (IP_192.168.1.225) vorhanden, aber z.B. der Drucker_Schalter_192.168.1.225 fehlt,
dann wird nach meinem Script zwar der fehlende Drucker Drucker_Schalter_192.168.1.225 nachinstalliert,
aber auch die Drucker_Schalter_192.168.1.226 und IP_192.168.1.255, jeweils mit (Kopie 1) als Name.

Unter Drucker und Faxgeräte sieht das dann so aus:
Drucker_Schalter_192.168.1.225 zum IP-Port IP_192.168.1.225
Drucker_Schalter_192.168.1.226 zum IP-Port IP_192.168.1.226
Drucker_Schalter_192.168.1.226 (Kopie 1) zum IP-Port IP_192.168.1.226
Drucker_Schalter_192.168.1.255 zum IP-Port IP_192.168.1.255
Drucker_Schalter_192.168.1.255 (Kopie 1) zum IP-Port IP_192.168.1.255

Das gleiche Spiel habe ich auch, wenn alle meine Drucker vorhanden sind (Drucker_Schalter_192.168.1.225,
Drucker_Schalter_192.168.1.226 und Drucker_Schalter_192.168.1.255) und ich lösche als Test in der Registry z.B. den IP-Port
IP_192.168.1.225.

Dann laüft das Script einwandfrei an, stellt fest es existiert der Drucker Drucker_Schalter_192.168.1.225, schaut nach,
existiert der IP-Port, stellt fest, der Port fehlt, insalliert den IP-Port aber auch alle danachfolgenden Drucker.
D.h. mein Ergebnis sieht wieder so aus:
Unter Drucker und Faxgeräte:
Drucker_Schalter_192.168.1.225 zum IP-Port IP_192.168.1.225
Drucker_Schalter_192.168.1.226 zum IP-Port IP_192.168.1.226
Drucker_Schalter_192.168.1.226 (Kopie 1) zum IP-Port IP_192.168.1.226
Drucker_Schalter_192.168.1.255 zum IP-Port IP_192.168.1.255
Drucker_Schalter_192.168.1.255 (Kopie 1) zum IP-Port IP_192.168.1.255

Ich finde im Moment mein Problem nicht. Kannst Du mir bitte helfen?
Ich habe das Script in gekürzter Form beigefügt. Die Unterprogramme CREATE_IP_PORT,
Start/Stop Spooler usw. laufen ja soweit, daher nur die gekürzte Fassung. Die Teile auf
die es bei der Abfrage ankommt habe ich komplett dringelassen.

Kann ich das Script Deiner Meinung nach noch optimieren/vereinfachen/besser strukturieren?

Grüße,
Flauschbobbel



01.
 
02.
@echo off & setlocal
03.
 
04.
:: ======================================================================
05.
::
06.
:: C O N F I G	/  Modifikationen und Einstellungen
07.
::
08.
:: ======================================================================
09.
 
10.
::	Script und Logfile
11.
	set STitle=AddPrntr.cmd
12.
	set LINE=----------------------------------------------------------------------
13.
	set scriptdir=%~dp0
14.
	set AddPrntLog=%temp%\AddPrntr_%ComputerName%.log
15.
	set AddPrntLogOld=%temp%\AddPrntr_%ComputerName%.old
16.
 
17.
::	Schalter-Variable fuer Testprint
18.
::	Ist diese mit dem Wert True gesetzt, wird nach erfolgreicher Installation 
19.
::	des Standard-TCP/IP-Ports und des Druckers eine Testseite gedruckt.
20.
::	Nur für Testzwecke.
21.
	set TstPrnt=
22.
 
23.
 
24.
::	Druckerinstallation
25.
	set "INFdir_PS=%scriptdir%DrvPS\"
26.
	set "INFdir_PCL6=%scriptdir%DrvPCL6\"
27.
	set "INFfile_PS=%INFdir_PS%ricsetup.inf"
28.
	set "INFfile_PCL6=%INFdir_PCL6%OEMSETUP.INF"
29.
	set ModellDruckerTreiber_PS="RICOH Aficio SP 4100N PS"
30.
	set ModellDruckerTreiber_PCL6="RICOH Aficio SP 4110N PCL 6"
31.
 
32.
::  	Hier ggf. die zu installierende Druckersprache (PS oder PCL6) auswählen.
33.
::  	Als Standard wird PCL6 verwendet.
34.
::
35.
	set INFfile=%INFfile_PCL6%
36.
	set ModellDruckerTreiber=%ModellDruckerTreiber_PCL6%
37.
 
38.
 
39.
:: 	Namenskonvention der Druckernamen
40.
:: 	Drucker_Schalter_<IP-Adr> 
41.
:: 
42.
	set DefineDruckerName=Drucker_Schalter_
43.
	set DefineDruckerNr=0
44.
 
45.
 
46.
::	Excelliste (.csv) als Inputinformationen für dieses Installationsscript
47.
::
48.
	set "InputListe=%scriptdir%RO_TEST.csv"
49.
 
50.
 
51.
 
52.
:: ======================================================================
53.
::
54.
:: M A I N
55.
::
56.
:: ======================================================================
57.
 
58.
::	Wenn bereits ein .LOG existiert, kopieren auf .OLD 
59.
	if exist %AddPrntLog% copy /Y %AddPrntLog% %AddPrntLogOld% >NUL
60.
 
61.
::	Startline im Logfile
62.
	echo %date% %time% - %LINE%							> %AddPrntLog%
63.
	echo %date% %time% - Start %sTitle% on Node %ComputerName%			>> %AddPrntLog%
64.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
65.
 
66.
 
67.
::	Prüfen, ob das Schreiben der Log-Datei erfolgreich war
68.
	if not exist %AddPrntLog% goto fehler_logfile
69.
 
70.
 
71.
::	Prüfen ob die notwendigen Installationsverzeichnisse/Dateien vorhanden sind
72.
	set OK=True
73.
	if not exist "%INFfile%" (
74.
		echo %date% %time% - ERROR: Datei %INFfile% nicht vorhanden!		>> %AddPrntLog%
75.
		set OK=
76.
	)
77.
	if not exist "%InputListe%" (
78.
		echo %date% %time% - ERROR: Excel-Inputdatei %InputListe% nicht vorhanden! >> %AddPrntLog%
79.
		set OK=
80.
	)
81.
	if not defined OK goto :FEHLER_SOURCEFILES
82.
 
83.
 
84.
::	Info über die Lokation der Input-Dateien ins Logfile eintragen
85.
	echo %date% %time% - Installationsource der INF-Datei: %INFfile% 		>> %AddPrntLog%	
86.
	echo %date% %time% - Excel-Inputliste: %InputListe% 				>> %AddPrntLog%
87.
 
88.
 
89.
::	IP-Adresse des Clients auslesen, 
90.
::  	IP-Adressen der zu installierenden Drucker aus Excelliste 
91.
::	auslesen und für Nutzung zusammensetzen
92.
 
93.
::IP des Client auslesen
94.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
95.
	::IP des Clients zerlegen in %%a.%%b.%%c.%%d
96.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
97.
		::Drucker aus der Excelliste auslesen
98.
		for /f "tokens=10-14 delims=;" %%m in ('findstr /c:"%%a.%%b.%%c." "%InputListe%"') do (
99.
			::Drucker installieren
100.
			echo Installiere mit Daten %%m %%n %%o %%p >>NUL
101.
			::Zweiter Parameter = Netzanteil der IP-Adresse des aktuellen Rechners
102.
			call :PROCESSLINE "%%m %%n %%o %%p" "%%a.%%b.%%c"
103.
		)
104.
	)
105.
)
106.
 
107.
	call :CLEANUP
108.
	goto ENDE
109.
 
110.
 
111.
:: ----------------------------------------------------------------------
112.
::
113.
::     **********     Unterprogramme Processline    **********
114.
::
115.
:: ----------------------------------------------------------------------
116.
 
117.
:: ----------------------------------------------------------------------
118.
:ProcessLine
119.
:: ----------------------------------------------------------------------
120.
echo Unterprogramm: Installiere mit Daten %~1 >NUL
121.
:: so viele Drucker installieren, wie Adressen vorhanden
122.
for %%i in (%~1) do (
123.
	echo Bearbeite IP %%i >NUL
124.
	::Adresse in IP-Range?
125.
	echo %%i|findstr /c:%2 >NUL && (
126.
		set "ipadr=%%i" 
127.
		set "IPPortName=IP_%%i"
128.
		::Schalter setzen
129.
		REM Schalter-Variable - diese wird zunaechst gesetzt, und, 
130.
		REM wenn im Unterprogramm die IP gefunden wird, geloescht. 
131.
		REM Nach Rueckkehr ins Hauptprogramm ist dann am Zustand der 
132.
		REM Variablen  defined  oder  not defined  das Ergebnis 
133.
		REM der Ueberpruefung abzulesen.
134.
		set "InstIP=True"
135.
 
136.
		set InstDr=
137.
 
138.
		call :CHECK_PRINTER
139.
		call :CHECK_IP_PORT
140.
		::nur bei noch gesetztem Schalter installieren
141.
		if defined InstIP call :INSTALLATION
142.
		if not defined InstDR call :INSTALLATION_ONLY_PRINTER
143.
 
144.
	)
145.
)
146.
goto :eof
147.
 
148.
 
149.
 
150.
:: ----------------------------------------------------------------------
151.
:CHECK_IP_PORT
152.
:: ----------------------------------------------------------------------
153.
::
154.
::  	Prüfen, ob der Standard TCP/IP-Port bereits existiert 
155.
::     	und in der Registry eingetragen ist
156.
::
157.
::     	Wenn dem so ist, ist das Scripts bereits auf diesem Client gelaufen 
158.
::	und kann beendet werden
159.
::
160.
::	ERRORLEVEL=0 Standard TCP/IP-Port existiert in der Registry
161.
::	ERRORLEVEL=1 Standard TCP/IP-Port existiert nicht in der Registry
162.
::
163.
 
164.
	echo IM CHECK_IP_PORT
165.
 
166.
	echo %date% %time% - %LINE%									>> %AddPrntLog%
167.
	echo %date% %time% - Pruefen, ob der Standard TCP/IP-Port %IPPortName% bereits existiert... 	>> %AddPrntLog%
168.
	echo %date% %time% - REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v IPAddress >> %AddPrntLog%
169.
 
170.
::	Falls die IP in der Registry gefunden wird, InstIP-Schalter loeschen
171.
	REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%">NUL && set InstIP=
172.
 
173.
	if not defined InstIP (
174.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% bereits eingetragen 		>> %AddPrntLog%
175.
		rem goto :CHECK_PRINTER
176.
 		goto :eof
177.
	) else (
178.
		echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 		>> %AddPrntLog%
179.
	)
180.
 
181.
	echo\												>> %AddPrntLog%
182.
	goto :eof
183.
 
184.
 
185.
:: ----------------------------------------------------------------------
186.
:CHECK_PRINTER
187.
:: ----------------------------------------------------------------------
188.
::
189.
::  	Prüfen, ob der Drucker bereits installiert ist
190.
::
191.
::     	Wenn dem so ist, ist das Scripts bereits auf diesem Client gelaufen 
192.
::	und kann beendet werden
193.
::
194.
:: 	Schalter-Variable InstDr - diese wird zunaechst nicht gesetzt, und, 
195.
:: 	wenn im Unterprogramm ein Drucker gefunden wird, gesetzt. 
196.
:: 	Nach Rueckkehr ins Hauptprogramm und bei der Abfrage der Unterprogramme 
197.
::	ist dann am Zustand der Variablen  defined  oder  not defined  
198.
::	das Ergebnis der Ueberpruefung abzulesen.
199.
 
200.
	echo IM CHECK_PRINTER
201.
 
202.
::	set InstDr=
203.
 
204.
for /f "tokens=1 delims=:" %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do (
205.
		echo  Druckername aus DeviceID: %%x|findstr /c:"%DruckerName%%ipadr%" && (
206.
		echo Drucker %DruckerName%%ipadr% existiert.
207.
		set "InstDr=True"
208.
		)
209.
)
210.
 
211.
echo InstDr: %InstDr%
212.
echo Drucker: %DruckerName%%ipadr%.
213.
rem set ipadr=
214.
 
215.
	echo\												>> %AddPrntLog%
216.
	goto :eof
217.
 
218.
 
219.
:: ----------------------------------------------------------------------
220.
:INSTALLATION
221.
:: ----------------------------------------------------------------------
222.
 
223.
	set DruckerName=%DefineDruckerName%%ipadr%
224.
 
225.
	call :CREATE_TCPIP_PORT
226.
	call :STOP_START_SPOOLER
227.
	if defined InstIP goto :eof
228.
 
229.
:: ----------------------------------------------------------------------
230.
:INSTALLATION_ONLY_PRINTER
231.
:: ----------------------------------------------------------------------
232.
	echo INSTALLATION_ONLY_PRINTER
233.
 
234.
	call :ADD_PRINTER_DRIVER
235.
	call :ADD_LOGICAL_PRINTER
236.
	call :SETTING_PRINTER
237.
	If defined TstPrnt call :PRINT_TESTPAGE
238.
	goto :eof
239.
 
240.
 
241.
:: ----------------------------------------------------------------------
242.
:CREATE_TCPIP_PORT
243.
:: ----------------------------------------------------------------------
244.
 
245.
echo IM CREATE_TCPIP_PORT
246.
 
247.
::  	Standard TCP/IP-Port in die Registry eintragen 
248.
::	mit REG ADD Befehlen....
249.
	goto :eof
250.
 
251.
 
252.
:: ----------------------------------------------------------------------
253.
:STOP_START_SPOOLER
254.
:: ----------------------------------------------------------------------
255.
 
256.
:: 	Druckerwarteschlange anhalten/starten
257.
 
258.
	echo %date% %time% - Druckerwarteschlage anhalten... 				>> %AddPrntLog%
259.
	echo %date% %time% - Druckerwarteschlage starten... 				>> %AddPrntLog%
260.
	goto :eof
261.
 
262.
 
263.
 
264.
 
265.
:: ----------------------------------------------------------------------
266.
:ADD_PRINTER_DRIVER
267.
:: ----------------------------------------------------------------------
268.
 
269.
	echo IM ADD_PRINTER_DRIVER
270.
 
271.
	goto :eof
272.
 
273.
 
274.
:: ----------------------------------------------------------------------
275.
:ADD_LOGICAL_PRINTER
276.
:: ----------------------------------------------------------------------
277.
 
278.
	echo IM ADD_LOGICAL_PRINTER
279.
	goto :eof
280.
 
281.
 
282.
:: ----------------------------------------------------------------------
283.
:SETTING_PRINTER
284.
:: ----------------------------------------------------------------------
285.
 
286.
	echo IM SETTING_PRINTER
287.
	set DruckerName=%DefineDruckerName%%ipadr%
288.
	goto :eof
289.
 
290.
 
291.
:: ----------------------------------------------------------------------
292.
:PRINT_TESTPAGE
293.
:: ----------------------------------------------------------------------
294.
 
295.
:: 	Testseite ausdrucken / NUR WAEHREND DER TESTS !!!!
296.
	set DruckerName=%DefineDruckerName%%ipadr%
297.
	echo %date% %time% - Testseite auf %DefineDruckerName%%ipadr% ausdrucken... 	>> %AddPrntLog%
298.
	goto :eof
299.
 
300.
:: ----------------------------------------------------------------------
301.
:CLEANUP
302.
:: ----------------------------------------------------------------------
303.
::
304.
::  	Aufraeumen von nicht mehr benötigten Dateien
305.
::
306.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
307.
	echo %date% %time% - Loeschen nicht mehr benoetigter Dateien... 		>> %AddPrntLog%
308.
:: 	del %AddPrntLogOld%								>> %AddPrntLog%
309.
	goto :eof
310.
 
311.
 
312.
:: ----------------------------------------------------------------------
313.
:CLEAR_VARIABLES
314.
:: ----------------------------------------------------------------------
315.
 
316.
	set AddPrntLog=
317.
	set AddPrntLogOld=
318.
	set LINE=
319.
	set STitle=
320.
	set InputListe=
321.
	set scriptdir=
322.
	set ipadr=
323.
	set IPPortName=
324.
 
325.
	set INFdir_PS=
326.
	set INFdir_PCL6=
327.
	set INFfile=
328.
	set INFfile_PS=
329.
	set INFfile_PCL6=
330.
	set ModellDruckerTreiber=
331.
	set ModellDruckerTreiber_PS=
332.
	set ModellDruckerTreiber_PCL6=
333.
	set DruckerName=
334.
	set DefineDruckerNr=
335.
	set DefineDruckerName=
336.
	goto :eof
337.
 
338.
:: ----------------------------------------------------------------------
339.
::     **********  Ende Unterprogramme Processline  **********
340.
:: ----------------------------------------------------------------------
341.
 
342.
 
343.
::
344.
:: ----------------------------------------------------------------------
345.
:: *** Fehler-Ausgänge des Scripts
346.
:: ----------------------------------------------------------------------
347.
:FEHLER_LOGFILE
348.
echo %date% %time% - Errorlevel : %errorlevel%						>> %AddPrntLog%
349.
echo %date% %time% - ERROR: Fehler beim Anlegen der Log-Datei %AddPrntLog% !		>> %AddPrntLog%
350.
echo %date% %time% - ERROR: %sTitle% kann nicht fortgesetzt werden.			>> %AddPrntLog%
351.
echo ERROR: Fehler beim Anlegen der Log-Datei %AddPrntLog% !	
352.
echo ERROR: %sTitle% kann nicht fortgesetzt werden.
353.
goto ENDE_AUSGANG
354.
 
355.
:FEHLER_SOURCEFILES
356.
echo %date% %time% - Errorlevel : %errorlevel%						>> %AddPrntLog%
357.
echo %date% %time% - ERROR: Fehlende Input-Dateien (%INFfile% oder %InputListe%) !	>> %AddPrntLog%
358.
echo %date% %time% - ERROR: %sTitle% kann nicht fortgesetzt werden.			>> %AddPrntLog%
359.
goto ENDE
360.
 
361.
:: ----------------------------------------------------------------------
362.
:ENDE
363.
:: ----------------------------------------------------------------------
364.
 
365.
::	Bottomline im Logfile
366.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
367.
	echo %date% %time% - Ende %sTitle% on Node %ComputerName%     			>> %AddPrntLog%
368.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
369.
 
370.
	call :CLEAR_VARIABLES
371.
 
372.
:: ----------------------------------------------------------------------
373.
:ENDE_AUSGANG
374.
:: ----------------------------------------------------------------------
375.
 
Bitte warten ..
Mitglied: bastla
29.04.2008 um 23:26 Uhr
Hallo Flauschbobbel!

... sorry für meine verspätete Antwort ...
Na, in dieser Hinsicht hast Du ja noch einiges gut ...
Zu Deinem Entwurf:

Die Festlegung des Druckernamens erfolgte zwar an mehreren Stellen, aber etwas spät (Du willst ihn ja eigentlich schon bei der Auswertung der "wmic"-Abfrage verwenden) - ist in der neuen Version korrigiert; ebenso, dass die IP-Adresse ev doppelt angefügt worden wäre.

Außerdem habe ich die Verwendung des Schalters "InstDR" umgekehrt - wenn er im Unterprogramm gesetzt wird, bekommt das aufrufende Programm diese Tatsache nicht mit.

Das Löschen der Variablen am Ende wäre reiner Luxus - das "setlocal" am Anfang sorgt ohnehin dafür, dass neu hinzugekommene Variablen das Ende des Batches "nicht überleben".

Neu hinzugekommen ist die Berücksichtigung der "Subnet Mask", wobei die für den Client gültige Maske ja ohnehin ebenfalls per "ipconfig" ausgelesen werden kann - eine Erfassung in der .csv-Datei ist daher nicht nötig.

Die Schleife im Hauptprogramm ließ sich etwas vereinfachen, indem das Auslesen der Client-Daten (IP-Adresse, Maske) vorweg erfolgt und die Ergebnisse in Variablen für die weiteren Programmteile zur Verfügung gehalten werden.

Im Unterprogramm ":INSTALLATION" war die Abfrage "if defined InstIP" überflüssig, da dieses Unterprogramm ja ohnehin nur bei gesetztem Schalter "InstIP" aufgerufen wird.

Noch ein Detail (aber eher nur kosmetischer Natur): Die Variable %STitle% erhält jetzt ihren Wert aus Name und Typ der Batchdatei (ist etwas flexibler).

So sieht's nun aus:
01.
@echo off & setlocal
02.
 
03.
:: ======================================================================
04.
::
05.
:: C O N F I G	/  Modifikationen und Einstellungen
06.
::
07.
:: ======================================================================
08.
 
09.
::	Script und Logfile
10.
	set STitle=%~nx0
11.
	set LINE=----------------------------------------------------------------------
12.
	set scriptdir=%~dp0
13.
	set AddPrntLog=%temp%\AddPrntr_%ComputerName%.log
14.
	set AddPrntLogOld=%temp%\AddPrntr_%ComputerName%.old
15.
 
16.
 
17.
::	Schalter-Variable fuer Testprint
18.
::	Ist diese mit dem Wert True gesetzt, wird nach erfolgreicher Installation 
19.
::	des Standard-TCP/IP-Ports und des Druckers eine Testseite gedruckt.
20.
::	Nur für Testzwecke.
21.
	set TstPrnt=
22.
 
23.
 
24.
::	Druckerinstallation
25.
	set "INFdir_PS=%scriptdir%DrvPS\"
26.
	set "INFdir_PCL6=%scriptdir%DrvPCL6\"
27.
	set "INFfile_PS=%INFdir_PS%ricsetup.inf"
28.
	set "INFfile_PCL6=%INFdir_PCL6%OEMSETUP.INF"
29.
	set ModellDruckerTreiber_PS="RICOH Aficio SP 4100N PS"
30.
	set ModellDruckerTreiber_PCL6="RICOH Aficio SP 4110N PCL 6"
31.
 
32.
::  	Hier ggf. die zu installierende Druckersprache (PS oder PCL6) auswählen.
33.
::  	Als Standard wird PCL6 verwendet.
34.
::
35.
	set INFfile=%INFfile_PCL6%
36.
	set ModellDruckerTreiber=%ModellDruckerTreiber_PCL6%
37.
 
38.
 
39.
:: 	Namenskonvention der Druckernamen
40.
:: 	Drucker_Schalter_<IP-Adr> 
41.
:: 
42.
	set DefineDruckerName=Drucker_Schalter_
43.
	set DefineDruckerNr=0
44.
 
45.
 
46.
::	Excelliste (.csv) als Inputinformationen für dieses Installationsscript
47.
::
48.
	set "InputListe=%scriptdir%RO_TEST.csv"
49.
 
50.
 
51.
:: ======================================================================
52.
::
53.
:: M A I N
54.
::
55.
:: ======================================================================
56.
 
57.
::	Wenn bereits ein .LOG existiert, kopieren auf .OLD 
58.
	if exist %AddPrntLog% copy %AddPrntLog% %AddPrntLogOld% >NUL
59.
 
60.
::	Startline im Logfile
61.
	echo %date% %time% - %LINE%							> %AddPrntLog%
62.
	echo %date% %time% - Start %sTitle% on Node %ComputerName%			>> %AddPrntLog%
63.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
64.
 
65.
 
66.
::	Prüfen, ob das Schreiben der Log-Datei erfolgreich war
67.
	if not exist %AddPrntLog% goto fehler_logfile
68.
 
69.
 
70.
::	Prüfen ob die notwendigen Installationsverzeichnisse/Dateien vorhanden sind
71.
	set OK=True
72.
	if not exist "%INFfile%" (
73.
		echo %date% %time% - ERROR: Datei %INFfile% nicht vorhanden!		>> %AddPrntLog%
74.
		set OK=
75.
	)
76.
	if not exist "%InputListe%" (
77.
		echo %date% %time% - ERROR: Excel-Inputdatei %InputListe% nicht vorhanden! >> %AddPrntLog%
78.
		set OK=
79.
	)
80.
	if not defined OK goto :FEHLER_SOURCEFILES
81.
 
82.
 
83.
::	Info über die Lokation der Input-Dateien ins Logfile eintragen
84.
	echo %date% %time% - Installationsource der INF-Datei: %INFfile% 		>> %AddPrntLog%	
85.
	echo %date% %time% - Excel-Inputliste: %InputListe% 				>> %AddPrntLog%
86.
 
87.
 
88.
::	IP-Adresse des Clients auslesen, 
89.
::  	IP-Adressen der zu installierenden Drucker aus Excelliste 
90.
::	auslesen und für Nutzung zusammensetzen
91.
 
92.
:: IP des Clients auslesen
93.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
94.
	::IP des Clients zerlegen in %%a.%%b.%%c = Netzanteil = %CI13% und %%d = Hostanteil = %CI4% (diese Variable steht fuer: 4. Stelle der Client-IP)
95.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do set "CI13=%%a.%%b.%%c" & set "CI4=%%d"
96.
)
97.
:: Subnet Mask des Clients auslesen
98.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR /i "mask"') do (
99.
	::Subnet Mask des Clients zerlegen in %%a.%%b.%%c (255.255.255 wird vorausgesetzt) sowie Anteil %%d 
100.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do set "S13=%%a.%%b.%%c" & set "S4=%%d"
101.
)
102.
 
103.
:: Faktor fuer Subnet-Berechnung = Anzahl der möglichen Adressen je Subnetz
104.
set /a SNF=256-%S4%
105.
:: Subnet-Index des Clients berechnen
106.
set /a CSNI=%CI4%/%SNF%
107.
 
108.
:: Drucker-Datensatz aus der Excelliste auslesen - zumindest Netzanteil (Teile 1 bis 3 der IP-Adresse) muss uebereinstimmen
109.
for /f "tokens=10-14 delims=;" %%m in ('findstr /c:"%CI13%." "%InputListe%"') do (
110.
	:: Drucker installieren - bis zu 4 Adressen uebergeben
111.
	echo Installiere mit Daten %%m %%n %%o %%p
112.
	call :PROCESSLINE "%%m %%n %%o %%p"
113.
)
114.
 
115.
	call :CLEANUP
116.
	goto ENDE
117.
 
118.
 
119.
:: ----------------------------------------------------------------------
120.
::
121.
::     **********     Unterprogramm Processline    **********
122.
::
123.
:: ----------------------------------------------------------------------
124.
 
125.
:: ----------------------------------------------------------------------
126.
:ProcessLine
127.
:: ----------------------------------------------------------------------
128.
echo Unterprogramm: Installiere mit Daten %~1 >NUL
129.
:: so viele Drucker installieren, wie Adressen vorhanden
130.
for %%i in (%~1) do (
131.
	echo Bearbeite IP %%i >NUL
132.
	::Werte fuer Installation festlegen
133.
	set "ipadr=%%i" 
134.
	set "IPPortName=IP_%%i"
135.
	set "DruckerName=%DefineDruckerName%%%i"
136.
	
137.
	::Adresse in IP-Range (Stellen 1-3 der Client-IP in Drucker-IP enthalten)?
138.
	echo %%i|findstr /c:"%CI13%." >NUL && (
139.
	
140.
		::Pruefen auf selbes Subnet
141.
		set "SubnetOK=True"
142.
		call :CHECK_SUBNET "%%i"
143.
		
144.
		::Wenn Drucker im selben Subnet wie Client, weiter pruefen ...
145.
		if defined SubnetOK (
146.
			REM Schalter setzen
147.
			REM Schalter-Variable - diese wird zunaechst gesetzt, und, 
148.
			REM wenn im Unterprogramm die IP gefunden wird, geloescht. 
149.
			REM Nach Rueckkehr ins Hauptprogramm ist dann am Zustand der 
150.
			REM Variablen  "defined"  oder  "not defined"  das Ergebnis 
151.
			REM der Ueberpruefung abzulesen.
152.
			set "InstDR=True"
153.
			call :CHECK_PRINTER
154.
 
155.
			set "InstIP=True"
156.
			call :CHECK_IP_PORT
157.
 
158.
			:: nur bei noch gesetztem Schalter installieren
159.
			if defined InstIP call :INSTALLATION
160.
			if defined InstDR call :INSTALLATION_ONLY_PRINTER
161.
			
162.
		) else (
163.
			echo %date% %time% - Drucker-IP %%i nicht im selben Subnet wie Client-IP %CI13%.%CI4%		>> %AddPrntLog%
164.
		)
165.
	)
166.
)
167.
goto :eof
168.
 
169.
:: ----------------------------------------------------------------------
170.
::     **********  Ende Unterprogramme Processline  **********
171.
:: ----------------------------------------------------------------------
172.
 
173.
 
174.
:CHECK_SUBNET
175.
::Hostanteil Drucker-IP ermitteln
176.
for /f "tokens=4 delims=." %%a in (%1) do set PI4=%%a
177.
::Subnet-Index Drucker berechnen
178.
set /a PSNI=%PI4%/%SNF%
179.
::Subnet-Indizes Drucker und Client vergleichen; wenn ungleich, Schalter loeschen
180.
if %PSNI% neq %CSNI% set SubnetOK=
181.
goto :eof
182.
 
183.
:: ----------------------------------------------------------------------
184.
:CHECK_IP_PORT
185.
:: ----------------------------------------------------------------------
186.
::
187.
::  	Prüfen, ob der Standard TCP/IP-Port bereits existiert 
188.
::     	und in der Registry eingetragen ist
189.
::
190.
::     	Wenn dem so ist, ist das Scripts bereits auf diesem Client gelaufen 
191.
::	und kann beendet werden
192.
::
193.
::	ERRORLEVEL=0 Standard TCP/IP-Port existiert in der Registry
194.
::	ERRORLEVEL=1 Standard TCP/IP-Port existiert nicht in der Registry
195.
::
196.
echo IM CHECK_IP_PORT
197.
 
198.
echo %date% %time% - %LINE%									>> %AddPrntLog%
199.
echo %date% %time% - Pruefen, ob der Standard TCP/IP-Port %IPPortName% bereits existiert... 	>> %AddPrntLog%
200.
echo %date% %time% - REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v IPAddress >> %AddPrntLog%
201.
 
202.
::	Falls die IP in der Registry gefunden wird, InstIP-Schalter loeschen
203.
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%">NUL && set InstIP=
204.
 
205.
if not defined InstIP (
206.
	echo %date% %time% - Standard TCP/IP-Port %IPPortName% bereits eingetragen 		>> %AddPrntLog%
207.
	::goto :CHECK_PRINTER
208.
		goto :eof
209.
) else (
210.
	echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 		>> %AddPrntLog%
211.
)
212.
 
213.
echo\												>> %AddPrntLog%
214.
goto :eof
215.
 
216.
:: ----------------------------------------------------------------------
217.
:CHECK_PRINTER
218.
:: ----------------------------------------------------------------------
219.
::
220.
::  	Prüfen, ob der Drucker bereits installiert ist
221.
::
222.
::     	Wenn dem so ist, ist das Scripts bereits auf diesem Client gelaufen 
223.
::	und kann beendet werden
224.
::
225.
:: 	Schalter-Variable InstDr - diese wird zunaechst nicht gesetzt, und, 
226.
:: 	wenn im Unterprogramm ein Drucker gefunden wird, gesetzt. 
227.
:: 	Nach Rueckkehr ins Hauptprogramm und bei der Abfrage der Unterprogramme 
228.
::	ist dann am Zustand der Variablen  defined  oder  not defined  
229.
::	das Ergebnis der Ueberpruefung abzulesen.
230.
 
231.
echo IM CHECK_PRINTER
232.
 
233.
::	set InstDr=
234.
 
235.
for /f "tokens=1 delims=:" %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do (
236.
		echo  Druckername aus DeviceID: %%x|findstr /c:"%DruckerName%" && (
237.
		echo Drucker %DruckerName% existiert.
238.
		set InstDr=
239.
		)
240.
)
241.
 
242.
echo InstDr: %InstDr%
243.
echo Drucker: %DruckerName%
244.
 
245.
echo\												>> %AddPrntLog%
246.
goto :eof
247.
 
248.
:: ----------------------------------------------------------------------
249.
:INSTALLATION
250.
:: ----------------------------------------------------------------------
251.
	call :CREATE_TCPIP_PORT
252.
	call :STOP_START_SPOOLER
253.
	goto :eof
254.
 
255.
:: ----------------------------------------------------------------------
256.
:INSTALLATION_ONLY_PRINTER
257.
:: ----------------------------------------------------------------------
258.
	echo INSTALLATION_ONLY_PRINTER
259.
 
260.
	call :ADD_PRINTER_DRIVER
261.
	call :ADD_LOGICAL_PRINTER
262.
	call :SETTING_PRINTER
263.
	If defined TstPrnt call :PRINT_TESTPAGE
264.
	goto :eof
265.
 
266.
:: ----------------------------------------------------------------------
267.
:CREATE_TCPIP_PORT
268.
:: ----------------------------------------------------------------------
269.
echo IM CREATE_TCPIP_PORT
270.
 
271.
::  	Standard TCP/IP-Port in die Registry eintragen 
272.
::	mit REG ADD Befehlen....
273.
	goto :eof
274.
 
275.
:: ----------------------------------------------------------------------
276.
:STOP_START_SPOOLER
277.
:: ----------------------------------------------------------------------
278.
:: 	Druckerwarteschlange anhalten/starten
279.
 
280.
	echo %date% %time% - Druckerwarteschlage anhalten... 				>> %AddPrntLog%
281.
	echo %date% %time% - Druckerwarteschlage starten... 				>> %AddPrntLog%
282.
	goto :eof
283.
 
284.
:: ----------------------------------------------------------------------
285.
:ADD_PRINTER_DRIVER
286.
:: ----------------------------------------------------------------------
287.
	echo IM ADD_PRINTER_DRIVER
288.
	goto :eof
289.
 
290.
:: ----------------------------------------------------------------------
291.
:ADD_LOGICAL_PRINTER
292.
:: ----------------------------------------------------------------------
293.
	echo IM ADD_LOGICAL_PRINTER
294.
	goto :eof
295.
 
296.
:: ----------------------------------------------------------------------
297.
:SETTING_PRINTER
298.
:: ----------------------------------------------------------------------
299.
	echo IM SETTING_PRINTER
300.
	goto :eof
301.
 
302.
:: ----------------------------------------------------------------------
303.
:PRINT_TESTPAGE
304.
:: ----------------------------------------------------------------------
305.
:: 	Testseite ausdrucken / NUR WAEHREND DER TESTS !!!!
306.
	echo %date% %time% - Testseite auf %DefineDruckerName%%ipadr% ausdrucken... 	>> %AddPrntLog%
307.
	goto :eof
308.
	
309.
:: ----------------------------------------------------------------------
310.
:CLEANUP
311.
:: ----------------------------------------------------------------------
312.
::
313.
::  	Aufraeumen von nicht mehr benötigten Dateien
314.
::
315.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
316.
	echo %date% %time% - Loeschen nicht mehr benoetigter Dateien... 		>> %AddPrntLog%
317.
:: 	del %AddPrntLogOld%								>> %AddPrntLog%
318.
	goto :eof
319.
 
320.
::
321.
:: ----------------------------------------------------------------------
322.
:: *** Fehler-Ausgänge des Scripts
323.
:: ----------------------------------------------------------------------
324.
:FEHLER_LOGFILE
325.
echo %date% %time% - Errorlevel : %errorlevel%						>> %AddPrntLog%
326.
echo %date% %time% - ERROR: Fehler beim Anlegen der Log-Datei %AddPrntLog% !		>> %AddPrntLog%
327.
echo %date% %time% - ERROR: %sTitle% kann nicht fortgesetzt werden.			>> %AddPrntLog%
328.
echo ERROR: Fehler beim Anlegen der Log-Datei %AddPrntLog% !	
329.
echo ERROR: %sTitle% kann nicht fortgesetzt werden.
330.
goto ENDE_AUSGANG
331.
 
332.
:FEHLER_SOURCEFILES
333.
echo %date% %time% - Errorlevel : %errorlevel%						>> %AddPrntLog%
334.
echo %date% %time% - ERROR: Fehlende Input-Dateien (%INFfile% oder %InputListe%) !	>> %AddPrntLog%
335.
echo %date% %time% - ERROR: %sTitle% kann nicht fortgesetzt werden.			>> %AddPrntLog%
336.
goto ENDE
337.
 
338.
:: ----------------------------------------------------------------------
339.
:ENDE
340.
:: ----------------------------------------------------------------------
341.
::	Bottomline im Logfile
342.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
343.
	echo %date% %time% - Ende %sTitle% on Node %ComputerName%     			>> %AddPrntLog%
344.
	echo %date% %time% - %LINE%							>> %AddPrntLog%
345.
 
346.
:: ----------------------------------------------------------------------
347.
:ENDE_AUSGANG
348.
:: ----------------------------------------------------------------------
Grüße
bastla
Bitte warten ..
Mitglied: Biber
29.04.2008 um 23:55 Uhr
.... und eine (hoffentlich letzte) Anregung:

Diese gefühlte 100x nach gleichem Muster auftauchenden LogMeldungen...
01.
...
02.
echo %date% %time% - Standard TCP/IP-Port %IPPortName% noch nicht vorhanden 		>> %AddPrntLog%
.... würde ich über einen Call:Block abfackeln:

01.
.....
02.
Call:WriteLog "Standard TCP/IP-Port %IPPortName% noch nicht vorhanden"
03.
....
04.
...
05.
goto :eof
06.
 
07.
:WriteLog
08.
>> %AddPrntLog% echo %date% %time% - %~1
09.
:goto eof
Grüße
Biber
Bitte warten ..
Mitglied: Flauschbobbel
05.05.2008 um 20:10 Uhr
Hallo bastla,

zunächst nochmals herzlichen Dank, soweit funktioniert das Skript sehr gut
Ich habe noch ein Problem mit dem Auslesen der Subnetmask. Nachdem ich heute meine aktuelle Liste erhalten habe, stelle ich fest, dass ich folgende Subnetmasks habe:

255.255.255.0
255.255.255.128
255.255.255.224
255.255.255.240

Wie kann ich die noch in die Schleife (mit der mask von 255.255.255.128) mit einbauen? Ich habe überhaupt keinen Plan. Sorry, kannst Du mir bitte eine Hilfestellung geben...

Danke und viele Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: Flauschbobbel
05.05.2008 um 20:13 Uhr
Hallo biber,

Deine Idee ist echt klasse, habe ich umgesetzt. Wie kann ich aber bsp.

call :WRITELOG "Druckerwarteschlange anhalten..."
call :WRITELOG "net stop spooler"
net stop spooler >> %AddPrntLog%

die Ausgabe eines Befehls, z.B. net stop spooler umsetzen? Bei den normalen "echo"-Befehlen klappt das sehr gut. Ich habe es wie in obigem Bsp gemacht. Gibt es eine andere Möglichkeit?

Danke und Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: Biber
05.05.2008 um 21:08 Uhr
Moin Flauschbobbel,

z.B. so :
01.
call :WRITELOG "net stop spooler"
02.
For /F "Delims=" %%i IN ('net stop spooler') do  call :WRITELOG "%%i"
03.
....
Grüße
Biber
Bitte warten ..
Mitglied: bastla
05.05.2008 um 21:33 Uhr
Hallo Flauschbobbel!

Wie kann ich die noch in die Schleife (mit der mask von 255.255.255.128) mit einbauen?
Ich weiß nicht, ob ich Dich richtig verstehe, denn eine derartig "spezialisierte" Schleife gibt es nicht - der Batch sollte bereits jede mit 255.255.255 beginnende Maske verarbeiten ...

Abgesehen von der Überlegung, dass ja der installierende Rechner seine eigene Subnetmask kennt (und daher über "ipconfig", wie oben bereits vorgesehen, auslesen kann) und eigentlich daher eine Übernahme aus der .csv-Datei gar nicht nötig sein sollte, könntest Du für Einlesen und Zerlegung der Maske nach dem gleichen Schema wie bei den IP-Adressen (bzw wie im Teil ":: Subnet Mask des Clients auslesen" gezeigt) vorgehen ...

Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
05.05.2008 um 22:01 Uhr
Hallo bastla,

vielleicht habe ich mich unklar ausgedrückt, ich versuche es nochmal zusammenzufassen:
Ich habe eine csv-Liste mit IP-Adressen (incl. der Subnetmask) der zu installierenden Drucker in den jeweiligen Standorten. Das Skript incl. der csv-Liste und Druckertreiber wird auf alle Clients in allen Standorten verteilt und läuft auf allen Clients.
Das Skript auf dem Client schaut nun nach, welche IP-Adresse und Subnet-Mask habe ich (Client) und ist in der csv-Liste ein Drucker, der auf Basis der Subnetmask in der gleichen IP-range sich befindet. Wenn ja, dann soll der Drucker auf diesen Clients installiert werden. Wenn nein -> Ende Skript. Das Skript geht ja auch soweit.
Ich bin im Moment etwas verwirrt, weil ich in meiner Liste zu den bereits bekannte Subnetmask (255.255.255.128) nun noch die Subnetmaske 255.255.255.224 und 255.255.255.240 habe. Daher dachte inch nun, ich muss die Abfrage auf diese Bereiche ausdehnen. Ich muss also doch vergleichen, ist der Client und der zu installierende Drucker im gleichen Subnetz, wenn ja dann installiere. Korrekt? Oder mache ich einen Denkfehler?

Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
05.05.2008 um 22:21 Uhr
Hallo Flauschbobbel!

Ich muss also doch vergleichen, ist der Client und der zu installierende Drucker im gleichen Subnetz, wenn ja dann installiere. Korrekt?
Korrekt - allerdings ist diese Logik schon im obigen Batch integriert, wobei ich es für sinnvoller halte, die aktuell für den Rechner gültige "Subnet mask" auszulesen, anstatt die in der csv-Liste angegebene zu verwenden ...

Die verwendete Vorgangsweise:
01.
:: Subnet Mask des Clients auslesen
02.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR /i "mask"') do (
03.
	::Subnet Mask des Clients zerlegen in %%a.%%b.%%c (255.255.255 wird vorausgesetzt) sowie Anteil %%d 
04.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do set "S13=%%a.%%b.%%c" & set "S4=%%d"
05.
)
Nach diesen Zeilen steht in %S13% im Normallfall "255.255.255" (der Variablenname soll bedeuten "Subnetmask, Stellen 1-3") und in %S4% der vierte Teil der Maske. Auf Basis dessen kann als "Faktor" die Anzahl der Adressen je Subnet (%SNF%) und in weiterer Folge als "Subnet-Index" die laufende Nummer (Zählung beginnt bei 0) des Subnetztes ermittelt werden:
01.
:: Faktor fuer Subnet-Berechnung = Anzahl der möglichen Adressen je Subnetz
02.
set /a SNF=256-%S4%
03.
:: Subnet-Index des Clients berechnen
04.
set /a CSNI=%CI4%/%SNF%
Beispiel: Wenn der Rechner die IP-Adresse 192.168.1.123 und die Subnetmask 255.255.255.224 hätte, befände er sich im Subnet Nr. 3 - Erklärung: Aufgrund der Maske umfasst jedes Subnet 32 Adressen, daher Subnet 0 = 0 - 31, Subnet 1 = 32 - 63, Subnet 2 = 64 - 95, Subnet 3 = 96 - 127

Die selbe Berechnung stelle ich für jeden Drucker an (siehe ":CHECK_SUBNET"), und wenn die hiefür berechnete Nr mit jener des Rechners übereinstimmt, befindet er sich im gleichen Subnet und könnte daher installiert werden.

Grüße
bastla
Bitte warten ..
Mitglied: Flauschbobbel
13.05.2008 um 20:33 Uhr
Hallo bastla,

sorry für die verspätetet Antwort. Ich bin gesundheitlich einige Zeit ausgefallen und war im Krankenhaus.

Ich muss leider das Thema nochmal aufgreifen. Irgendwie habe ich noch ein Verständnisproblem:

Ich habe auf der einen Seite meine Inputliste (csv-Datei) mit folgendem Inhalt:
(Zur besseren Übersicht habe ich es mal in diesem Format dargestellt)


01.
 
02.
Standort-ID  ; Standort-Nr; Standortschlüssel ; PLZ  ; Ort      ; Strasse   ; Anzahl NetzwDr ; Bemerkung1 ; Bemerkung2 ; IP-Adresse   ; Subnet-Maske    ; DosenNr ; Bemerkung
03.
470:11       ; 8098835    ; 47011             ; 12345; Irgendwo ; Musterstr ; 1              ;            ;            ; 10.35.41.102 ; 255.255.255.224 ;         ;
04.
470:92       ; 8070837    ; 47092             ; 67891; Irgendwo2; Musterstr ; 2              ;            ;            ; 10.35.169.198; 255.255.255.224 ;         ;
05.
470:92       ; 8070837    ; 47092             ; 67891; Irgendwo2; Musterstr ; 2              ;            ;            ; 10.35.169.199; 255.255.255.224 ;         ;
06.
123:12       ; 1234567    : 12312             ; 54391; Musterstadt1; Musterstr;2             ;            ;            ; 10.36.168.33 ; 255.255.255.224 ;         ;
07.
123:12       ; 1234567    ; 12312             ; 54391; Musterstadt1; Musterstr;2             ;            ;            ; 10.36.168.34 ; 255.255.255.224 ;         ;
08.
123:13       ; 1234568    : 12313             ; 54444; Musterdorf; Musterstr;  2             ;            ;            ; 10.36.168.79 ; 255.255.255.224 ;         ;
09.
123:13       ; 1234568    : 12313             ; 54444; Musterdorf; Musterstr;  2             ;            ;            ; 10.36.168.80 ; 255.255.255.224 ;         ;
10.
890:11       ; 1198822    ; 89011             ; 98765; Irgendwo3; Musterstr ; 2              ;            ;            ; 160.54.78.86 ; 255.255.255.0   ;         ;
11.
890:11       ; 1198822    ; 89011             ; 98765; Irgendwo3; Musterstr ; 2              ;            ;            ; 160.54.78.87 ; 255.255.255.0   ;         ;
12.
100:22       ; 1198822    ; 10022             ; 23456; Irgendwo4; Musterstr ; 2              ;            ;            ; 160.54.31.231; 255.255.255.240 ;         ;
13.
100:22       ; 1198822    ; 10022             ; 23456; Irgendwo4; Musterstr ; 2              ;            ;            ; 160.54.31.232; 255.255.255.240 ;         ;
Die Liste zeigt die in den einzelnen Standorten zu installierenden (geplanten) Drucker und die dazugehörige Subnetmask der Drucker in den Standorten.


Auf der anderen Seite habe ich Deine Berechnung/Logik im Script:

Das Skript liest die IP und die Subnetmask des Clients aus:

01.
Die verwendete Vorgangsweise:
02.
:: Subnet Mask des Clients auslesen
03.
for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR /i "mask"') do (
04.
	::Subnet Mask des Clients zerlegen in %%a.%%b.%%c (255.255.255 wird vorausgesetzt) sowie Anteil %%d 
05.
	for /f "tokens=1-4 delims=. " %%a in ("%%i") do set "S13=%%a.%%b.%%c" & set "S4=%%d"
06.
)
OK, habe ich verstanden.

Anschliessend schaut das Skript in der Liste nach, ob der passende Drucker (mit der passenden IP) vorhanden ist.

01.
Nach diesen Zeilen steht in %S13% im Normallfall "255.255.255" (der Variablenname soll bedeuten "Subnetmask, Stellen 1-3") und in %S4% der vierte Teil der Maske. Auf Basis dessen kann als "Faktor" die Anzahl der Adressen je Subnet (%SNF%) und in weiterer Folge als "Subnet-Index" die laufende Nummer (Zählung beginnt bei 0) des Subnetztes ermittelt werden:
02.
:: Faktor fuer Subnet-Berechnung = Anzahl der möglichen Adressen je Subnetz
03.
set /a SNF=256-%S4%
04.
:: Subnet-Index des Clients berechnen
05.
set /a CSNI=%CI4%/%SNF%
06.
 
07.
Beispiel: Wenn der Rechner die IP-Adresse 192.168.1.123 und die Subnetmask 255.255.255.224 hätte, befände er sich im Subnet Nr. 3 - Erklärung: Aufgrund der Maske umfasst jedes Subnet 32 Adressen, daher Subnet 0 = 0 - 31, Subnet 1 = 32 - 63, Subnet 2 = 64 - 95, Subnet 3 = 96 - 127


OK, kann ich noch nachvollziehen, aber wie würde das in obigem Beispiel mit der IP-Adresse 160.54.31.231 und der Subnetmask 255.255.255.240 (aus meiner Liste) aussehen?
Was ist das für ein "Faktor", den Du hier erstellst? Wo kommt der her? Ich kann es irgendwie noch nicht nachvollziehen.

Schau auch bitte in der Liste auf die Beispiel von Musterstadt1 und Musterdorf. In beiden Standorten beginnt mein IP mit 10.36.168.xxx,
beide haben die Subnetmask 255.255.255.224. Dann würde das Skript doch alle Drucker (10.36.168.33, 34, 79 und 80) auf allen Clients in beiden Standorten installieren, oder?

01.
Standort-ID  ; Standort-Nr; Standortschlüssel ; PLZ  ; Ort         ; Strasse   ; Anzahl NetzwDr ; Bemerkung1 ; Bemerkung2 ; IP-Adresse   ; Subnet-Maske    ; DosenNr ; Bemerkung
02.
123:12       ; 1234567    : 12312             ; 54391; Musterstadt1; Musterstr ;2               ;            ;            ; 10.36.168.33 ; 255.255.255.224 ;         ;
03.
123:12       ; 1234567    ; 12312             ; 54391; Musterstadt1; Musterstr ;2               ;            ;            ; 10.36.168.34 ; 255.255.255.224 ;         ;
04.
123:13       ; 1234568    : 12313             ; 54444; Musterdorf  ; Musterstr ;2               ;            ;            ; 10.36.168.79 ; 255.255.255.224 ;         ;
05.
123:13       ; 1234568    : 12313             ; 54444; Musterdorf  ; Musterstr ;2               ;            ;            ; 10.36.168.80 ; 255.255.255.224 ;         ;

Sorry, bitte gib mir noch einen "Schubs ind die richtige Richtung" damit ich es verstehe.

Danke und viele Grüße,
Flauschbobbel
Bitte warten ..
Mitglied: bastla
13.05.2008 um 21:42 Uhr
Hallo Flauschbobbel!

Was ist das für ein "Faktor", den Du hier erstellst? Wo kommt der her? Ich kann es irgendwie noch nicht nachvollziehen.
Die Bezeichnung "Faktor" habe ich leider nicht glücklich gewählt - besser wäre "Anzahl der Netzwerkadressen je Subnet". Daraus errechne ich in weiterer Folge den "Subnetindex" oder, anders formuliert, die "nullbasierte Subnetznummer".

wie würde das in obigem Beispiel mit der IP-Adresse 160.54.31.231 und der Subnetmask 255.255.255.240 (aus meiner Liste) aussehen?
Auch die Rechner an diesem Standort müssten eigentlich die selbe Maske verwenden, sodass sich ein bestimmter Rechner in einem von insgesamt 16 möglichen Subnetzen befinden kann. Diese 16 Netze ergeben sich aus (256 - 240) = 16 Adressen je Netzwerk (= der angesprochene "Faktor") und 256 / 16 = 16 Netzwerke. Die einzelnen Subnetze hätten dabei folgende Zuordnung von Nummer (="Index") und Adressbereich (4. Teil nach 160.54.31):

Nr Adresse
00 - 15
116 - 31
232 - 47
348 - 63
464 - 79
580 - 95
696 - 111
7112 - 127
8128 - 143
9144 - 159
10160 - 175
11176 - 191
12192 - 207
13208 - 223
14224 - 239
15240 - 255

Der Drucker für die Adresse 160.54.31.231 würde demnach dann installiert, wenn der Rechner eine Adresse von 160.54.31.224 bis 160.54.31.239 hätte und somit im gleichen Subnetz wie der Drucker wäre - Rechenbeispiel für Rechneradresse 160.54.31.235:
01.
Rechner: 256 - 240 = 16 = "Faktor"; 235 / "Faktor" = 14,6875; ganzzahliger Anteil = 14 = "Index"
02.
Drucker: 256 - 240 = 16 = "Faktor"; 231 / "Faktor" = 14,4375; ganzzahliger Anteil = 14 = "Index"
Da die "Indices" gleich sind, "passt" der Drucker.

Musterstadt1 und Musterdorf ... 255.255.255.224. Dann würde das Skript doch alle Drucker (10.36.168.33, 34, 79 und 80) auf allen Clients in beiden Standorten installieren, oder?
Maske 255.255.255224 bedeutet Netzwerkgröße ("Faktor") 32 - die Drucker 33 und 34 befinden sich im Subnetz mit dem Index 1 (da 33/32 = ganzzahlig 1), 79 und 80 im Subnetz 2 (79 / 32 = ganzzahlig 2) - soferne die Rechner ebenfalls die Maske 255.255.255.224 verwenden, können nur jeweils 2 der Drucker im selben Subnetz wie der Rechner liegen und daher installiert werden.

Solltest Du allerdings davon ausgehen müssen, dass Rechner und Drucker unterschiedliche Masken haben, ließe sich das zwar rechnerisch ebenfalls lösen, allerdings wäre vorweg das Netzwerkdesign zu hinterfragen.

Grüße und gute Besserung
bastla
Bitte warten ..
Mitglied: Flauschbobbel
30.09.2008 um 17:34 Uhr
Hallo bastla,

ich melde mich mit meinem Problem nochmal auf diesen Thread..

Mein Problem ist nun: Bei einigen Standorten, wie zB. die in der Liste angegebenen,
wird nicht die richtige IP-Adresse und der Druckername ausgelesen (Sollte 10.179.169.44 bzw 10.179.169.46 und ABCDrucker1 bzw. ABCDrucker2 sein). Statt dessen installiert das Script die IP-Adresse 10.179.169.62 und den Drucker 132158 und 132159.
Ich dachte das könnte an Leerstellen in der Inputliste liegen und habe testweise ALLE Leerstellen entfernt. Problem ist aber das gleiche.
Und nun mein ganz grosses Problem. Es gibt Einträge, bei denen es einwandfrei funktioniert (z.B. "Bamberg" ind der Liste, siehe unten)!!! Also kann es doch nicht sein, dass ich an einer falschen Stelle im Abschnitt ":READ_NW_INFO_PRINTER" ab einer falschen Stelle beginne zu lesen.
In der Inputliste die Zeilen für Bamberg haben einwandfrei funktioniert und wurden bei 9 von 10 Clients sauber installiert.
Ich bin ratlos! Bitte helft mir!!

Ich habe das Script etwas überarbeitet. Hier erstmal das Script. Im Anschluss einen Ausschnitt der Inputliste (rt.csv)

01.
 
02.
@echo off & setlocal
03.
CD /D %~dp0
04.
:: ======================================================================
05.
::
06.
:: C O N F I G	/  Modifikationen und Einstellungen
07.
::
08.
:: ======================================================================
09.
 
10.
::	Script und Logfile
11.
	set STitle=%~nx0
12.
	set LINE=---------------------------------------------------------------------------
13.
	set scriptdir=%~dp0
14.
	set SName=%~n0
15.
	set LogPath=C:\Log\%SName%
16.
	set ScriptLog=%LogPath%\%SName%.log
17.
	set ScriptLogOld=%LogPath%\%SName%.old
18.
 
19.
::	T E S T  /  Schalter-Variable fuer Testprint
20.
::	Ist diese mit dem Wert True gesetzt, wird nach erfolgreicher Installation 
21.
::	des Standard-TCP/IP-Ports und des Druckers eine Testseite gedruckt.
22.
::	Nur fuer Testzwecke.
23.
	set "TstPrnt="
24.
 
25.
::	T E S T  /  Schalter-Variable fuer Testanzeige
26.
::	Ist diese mit dem Wert TRUE gesetzt, werden am Bildschirm die einzelnen
27.
::	Unterprogramme, in dem sich der Batch zur Laufzeit befindet, angezeigt.
28.
::	Zusaetzlich werden mit der Variable TstCMD Befehle nur waehrend der Tests durchgefuehrt.
29.
::	Nur fuer Testzwecke.
30.
	set "TstInfoMsg=*** TEST ***  Bearbeite"
31.
	set "TstCMD="
32.
	set "Tst="
33.
 
34.
::	Druckerinstallation
35.
	set ModellDrucker="RICOH Aficio SP 4100N PCL 6"
36.
	set ModellDruckerTreiber=%ModellDrucker%
37.
	set TmpModellDrucker=%ModellDrucker:~1,-1%
38.
::	Variablen fuer Druckersprache PCL6
39.
	set "INFdir_PCL6=%scriptdir%RicohDrvPCL\"
40.
	set "INFfile_PCL6=%INFdir_PCL6%OEMSETUP.INF"
41.
	set INFfile="%INFfile_PCL6%"
42.
	set TmpINFfile=%INFfile:~1,-1%
43.
 
44.
 
45.
:: 	Namenskonvention der Druckernamen
46.
	set DefineDruckerName=ICFDrucker
47.
 
48.
::	Excelliste (.csv) als Inputinformationen fuer dieses Installationsscript
49.
	set InputListe="%scriptdir%rt.csv"
50.
	set InputListeLocal="%scriptdir%rt_local.csv"
51.
	set InputListeRemote="%scriptdir%rt_Remote.csv"
52.
 
53.
 
54.
:: ======================================================================
55.
::
56.
:: M A I N
57.
::
58.
:: ======================================================================
59.
 
60.
::	Pruefen, ob Verzeichnis existiert, wenn nicht anlegen
61.
	if not exist %LogPath% call :CREATE_LOG_PATH
62.
 
63.
::	Wenn bereits ein .LOG existiert, kopieren auf .OLD 
64.
	if exist %ScriptLog% copy /Y %ScriptLog% %ScriptLogOld% >NUL
65.
 
66.
::	Startline in Logfile schreiben
67.
	echo\ > %ScriptLog%
68.
	call :WRITELOG %LINE%
69.
	call :WRITELOG "Start %sTitle% on Node %ComputerName%"
70.
	call :WRITELOG %LINE%
71.
 
72.
::	Pruefen, ob das Schreiben der Log-Datei erfolgreich war
73.
	if not exist %ScriptLog% goto FEHLER_LOGFILE
74.
 
75.
:: ----------------------------------------------------------------------
76.
:CHECK_OS
77.
:: ----------------------------------------------------------------------
78.
 
79.
	If defined Tst echo %TstInfoMsg% CHECK_OS
80.
 
81.
::	Pruefen auf korrektes Betriebssystem (Microsoft Windows XP Professional)
82.
::	wmic path win32_operatingsystem get caption
83.
	wmic path win32_operatingsystem get caption|FINDSTR /c:"XP Professional" >NUL && goto :XP_OK >NUL
84.
 
85.
::	Client ist kein Windows XP-Rechner
86.
	goto :FEHLER_OS
87.
 
88.
:: ----------------------------------------------------------------------
89.
:XP_OK
90.
:: ----------------------------------------------------------------------
91.
 
92.
	If defined Tst echo %TstInfoMsg% XP_OK
93.
 
94.
::	Client ist Windows XP-Rechner
95.
::	Info Betriebssystem ins Logfile eintragen
96.
	For /F "Delims=" %%j in ('ver') do call :WRITELOG "Betriebssystem: %%j"
97.
 
98.
:: ----------------------------------------------------------------------
99.
:CHECK_INSTALL_FOLDER
100.
:: ----------------------------------------------------------------------
101.
 
102.
	If defined Tst echo %TstInfoMsg% CHECK_INSTALL_FOLDER
103.
 
104.
::	Pruefen ob die notwendigen Installationsverzeichnisse/Dateien vorhanden sind
105.
	set OK=True
106.
	if not exist %InputListe% (
107.
::		      InputListe war in Anfuehrungszeichen
108.
		call :WRITELOG "ERROR: Inputdatei (lokal) '%InputListe%' nicht vorhanden!"
109.
		>> %ScriptLog% dir %scriptdir%
110.
		set OK=
111.
	)
112.
	if not defined OK goto :FEHLER_SOURCEFILES
113.
 
114.
:: ----------------------------------------------------------------------
115.
:WRITE_INFO_TO_LOG
116.
:: ----------------------------------------------------------------------
117.
 
118.
::	Info ueber die Lokation der Input-Dateien ins Logfile eintragen
119.
	call :WRITELOG "Druckerinstallation: %TmpModellDrucker%"
120.
	call :WRITELOG "Ausfuehrung des Skripts in: %scriptdir%"
121.
	call :WRITELOG %LINE%
122.
 
123.
:: ----------------------------------------------------------------------
124.
:READ_NW_INFO_CLIENT
125.
:: ----------------------------------------------------------------------
126.
 
127.
	If defined Tst echo %TstInfoMsg% READ_NW_INFO_CLIENT
128.
 
129.
::	IP-Adresse des Clients auslesen, 
130.
::  	IP-Adressen der zu installierenden Drucker aus Excelliste 
131.
::	auslesen und fuer Nutzung zusammensetzen
132.
 
133.
:: ----------------------------------------------------------------------
134.
:READ_IP_CLIENT
135.
:: ----------------------------------------------------------------------
136.
 
137.
	If defined Tst echo %TstInfoMsg% READ_IP_CLIENT
138.
 
139.
:: 	IP des Clients auslesen
140.
	for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR "IP-Ad"') do (
141.
		::IP des Clients zerlegen in %%a.%%b.%%c = Netzanteil = %CI13% und %%d = Hostanteil = %CI4% (diese Variable steht fuer: 4. Stelle der Client-IP)
142.
		for /f "tokens=1-4 delims=. " %%a in ("%%i") do set "CI13=%%a.%%b.%%c" & set "CI4=%%d"
143.
	)
144.
 
145.
:: ----------------------------------------------------------------------
146.
:READ_SUBNET_CLIENT
147.
:: ----------------------------------------------------------------------
148.
 
149.
	If defined Tst echo %TstInfoMsg% READ_SUBNET_CLIENT
150.
 
151.
:: 	Subnet Mask des Clients auslesen
152.
	for /f "tokens=2 delims=:" %%i in ('ipconfig^|FINDSTR /i "mask"') do (
153.
		::Subnet Mask des Clients zerlegen in %%a.%%b.%%c (255.255.255 wird vorausgesetzt) sowie Anteil %%d 
154.
		for /f "tokens=1-4 delims=. " %%a in ("%%i") do set "S13=%%a.%%b.%%c" & set "S4=%%d"
155.
	)
156.
 
157.
:: ----------------------------------------------------------------------
158.
:CALCULATE_SUBNET
159.
:: ----------------------------------------------------------------------
160.
 
161.
	If defined Tst echo %TstInfoMsg% CALCULATE_SUBNET
162.
 
163.
:: 	Faktor fuer Subnet-Berechnung = Anzahl der moeglichen Adressen je Subnetz
164.
	set /a SNF=256-%S4%
165.
:: 	Subnet-Index des Clients berechnen
166.
	set /a CSNI=%CI4%/%SNF%
167.
 
168.
:: 	Pruefwert ob eine zu installierende IP-Adresse in der Inputliste vorhanden ist.
169.
	set ChkInputIP=True
170.
 
171.
:: ----------------------------------------------------------------------
172.
:READ_NW_INFO_PRINTER
173.
:: ----------------------------------------------------------------------
174.
 
175.
	If defined Tst echo %TstInfoMsg% READ_NW_INFO_PRINTER
176.
 
177.
:: 	Drucker-Datensatz aus der Excelliste auslesen - zumindest Netzanteil (Teile 1 bis 3 der IP-Adresse) muss uebereinstimmen
178.
::	* Inputliste:
179.
::	* Spalte  9 = IP-Adr. des Druckers
180.
::	* Spalte 10 = SubnetMask des Druckers
181.
::	* Spalte 13 = Druckername
182.
:: 	InputListe2 war zuvor InputListe und in Anfuehrungszeichen gesetzt
183.
	set "InputListe2=%InputListe%"
184.
	for /f "tokens=9-13 delims=;" %%m in ('findstr /c:"%CI13%." %InputListe2%') do (
185.
		:: Drucker installieren - bis zu 4 Adressen uebergeben
186.
		echo Installiere mit Daten: %%m %%n %%o %%p %%q >NUL
187.
		set ChkInputIP=
188.
	 	call :PROCESSLINE "%%m %%n %%o %%p %%q"
189.
	)
190.
 
191.
	if defined ChkInputIP call :WRITELOG "*** Keine zu installierende IP-Adresse in der Liste gefunden. ***"
192.
 
193.
:: ----------------------------------------------------------------------
194.
:CLEANING_OUT
195.
:: ----------------------------------------------------------------------
196.
 
197.
	If defined Tst echo %TstInfoMsg% CLEANING_OUT
198.
 
199.
REM	call :CLEANUP
200.
REM	*** Unterprogramm CLEANUP derzeit disabled
201.
REM	*** Alle verwendetet Dateien bleiben auf dem Client
202.
	goto ENDE
203.
 
204.
:: ----------------------------------------------------------------------
205.
:PROCESSLINE
206.
:: ----------------------------------------------------------------------
207.
 
208.
	If defined Tst echo %TstInfoMsg% PROCESSLINE
209.
 
210.
	echo Unterprogramm: Installiere mit Daten %~1 >NUL
211.
 
212.
:: 	so viele Drucker installieren, wie Adressen vorhanden
213.
 
214.
	for %%i in (%~1) do (
215.
		echo Bearbeite IP %%i >NUL
216.
		::Werte fuer Installation festlegen
217.
		set "ipadr=%%i" 
218.
		set "IPPortName=IP_%%i"
219.
		set "DruckerName=%%q"
220.
	
221.
		::Adresse in IP-Range (Stellen 1-3 der Client-IP in Drucker-IP enthalten)?
222.
		echo %%i|findstr /c:"%CI13%." >NUL && (
223.
		
224.
			::Pruefen auf selbes Subnet
225.
			set "SubnetOK=True"
226.
			call :CHECK_SUBNET_PRINTER "%%i"
227.
			
228.
			::Wenn Drucker im selben Subnet wie Client, weiter pruefen ...
229.
			if defined SubnetOK (
230.
				REM Schalter setzen
231.
				REM Schalter-Variable - diese wird zunaechst gesetzt, und, 
232.
				REM wenn im Unterprogramm die IP gefunden wird, geloescht. 
233.
				REM Nach Rueckkehr ins Hauptprogramm ist dann am Zustand der 
234.
				REM Variablen  "defined"  oder  "not defined"  das Ergebnis 
235.
				REM der Ueberpruefung abzulesen.
236.
				set "InstDR=True"
237.
				call :CHECK_PRINTER
238.
	
239.
				set "InstIP=True"
240.
				call :CHECK_IP_PORT
241.
 
242.
				:: nur bei noch gesetztem Schalter installieren
243.
				if defined InstIP call :INSTALLATION
244.
				if defined InstDR call :INSTALLATION_PRINTER
245.
				
246.
			) else (
247.
				echo %date% %time% - Drucker-IP %%i nicht im selben Subnet wie Client-IP %CI13%.%CI4% >> %ScriptLog%
248.
			)
249.
		)
250.
	)
251.
	goto :eof
252.
 
253.
:: ----------------------------------------------------------------------
254.
:CHECK_SUBNET_PRINTER
255.
:: ----------------------------------------------------------------------
256.
 
257.
	If defined Tst echo %TstInfoMsg% CHECK_SUBNET_PRINTER
258.
 
259.
::	Hostanteil Drucker-IP ermitteln
260.
	for /f "tokens=4 delims=." %%a in (%1) do set PI4=%%a
261.
 
262.
::	Subnet-Index Drucker berechnen
263.
	set /a PSNI=%PI4%/%SNF%
264.
 
265.
::	Subnet-Indizes Drucker und Client vergleichen; wenn ungleich, Schalter loeschen
266.
	if %PSNI% neq %CSNI% set SubnetOK=
267.
	goto :eof
268.
 
269.
:: ----------------------------------------------------------------------
270.
:CHECK_IP_PORT
271.
:: ----------------------------------------------------------------------
272.
 
273.
	If defined Tst echo %TstInfoMsg% CHECK_IP_PORT
274.
 
275.
::  	Pruefen, ob der Standard TCP/IP-Port bereits existiert 
276.
::     	und in der Registry eingetragen ist.
277.
::     	Wenn dem so ist, ist das Scripts bereits auf diesem Client gelaufen 
278.
::	und kann beendet werden.
279.
 
280.
::	ERRORLEVEL=0 Standard TCP/IP-Port existiert in der Registry
281.
::	ERRORLEVEL=1 Standard TCP/IP-Port existiert nicht in der Registry
282.
 
283.
	call :WRITELOG %LINE%
284.
	call :WRITELOG "Pruefen, ob der Standard TCP/IP-Port %IPPortName% bereits existiert..."
285.
	call :WRITELOG "CMD: REG QUERY HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v IPAddress"
286.
 
287.
::	Falls die IP in der Registry gefunden wird, InstIP-Schalter loeschen
288.
	REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" /s | findstr /i "%IPPortName%">NUL && set InstIP=
289.
 
290.
	if not defined InstIP (
291.
		call :WRITELOG "Standard TCP/IP-Port %IPPortName% bereits eingetragen"
292.
		goto :eof
293.
	) else (
294.
		call :WRITELOG "Standard TCP/IP-Port %IPPortName% noch nicht vorhanden"
295.
	)
296.
		call :WRITELOG %LINE%
297.
	goto :eof
298.
 
299.
:: ----------------------------------------------------------------------
300.
:CHECK_PRINTER
301.
:: ----------------------------------------------------------------------
302.
 
303.
	If defined Tst echo %TstInfoMsg% CHECK_PRINTER
304.
 
305.
::  	Pruefen, ob der Drucker bereits installiert ist.
306.
::     	Wenn dem so ist, ist das Scripts bereits auf diesem Client gelaufen. 
307.
:: 	Schalter-Variable: InstDr 
308.
 
309.
	for /f "tokens=1 delims=:" %%x in ('wmic printer get DeviceID^|FINDSTR "%DruckerName%"') do (
310.
			echo  Druckername aus DeviceID: %%x|findstr /c:"%DruckerName%" >NUL && (
311.
			call :WRITELOG %LINE%
312.
			call :WRITELOG "Pruefen, ob der Drucker bereits existiert..."
313.
			call :WRITELOG "Status InstDr: %InstDr%  Drucker: %DruckerName% existiert."
314.
			set InstDr=
315.
			)
316.
	)
317.
	goto :eof
318.
 
319.
:: ----------------------------------------------------------------------
320.
:INSTALLATION
321.
:: ----------------------------------------------------------------------
322.
 
323.
	If defined Tst echo %TstInfoMsg% INSTALLATION
324.
 
325.
::	Installation/Konfiguration Standard-TCPIP-Port am Client
326.
 
327.
	call :CREATE_TCPIP_PORT
328.
	call :STOP_START_SPOOLER
329.
	goto :eof
330.
 
331.
:: ----------------------------------------------------------------------
332.
:INSTALLATION_PRINTER
333.
:: ----------------------------------------------------------------------
334.
 
335.
	If defined Tst echo %TstInfoMsg% INSTALLATION_PRINTER
336.
 
337.
::	Installation/Konfiguration des Druckers
338.
 
339.
	call :ADD_LOGICAL_PRINTER  
340.
	call :SETTING_PRINTER
341.
	If defined TstPrnt call :PRINT_TESTPAGE
342.
	goto :eof
343.
 
344.
 
345.
:: ======================================================================
346.
::
347.
:: S U B R O U T I N E S  /  E R R O R H A N D L I N G 
348.
::
349.
:: ======================================================================
350.
 
351.
:: ----------------------------------------------------------------------
352.
:CREATE_TCPIP_PORT
353.
:: ----------------------------------------------------------------------
354.
 
355.
	If defined Tst echo %TstInfoMsg% CREATE_TCPIP_PORT
356.
 
357.
::  	Standard TCP/IP-Port in die Registry eintragen 
358.
 
359.
	call :WRITELOG "Standard TCP/IP-Port %IPPortName% in die Registry eintragen..."
360.
 
361.
	call :WRITELOG "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%"
362.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" >> %ScriptLog%
363.
 
364.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v Protocol /t REG_DWORD /d 00000001"
365.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v Protocol /t REG_DWORD /d 00000001 >> %ScriptLog%
366.
 
367.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v Version /t REG_DWORD /d 00000001"
368.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v Version /t REG_DWORD /d 00000001 >> %ScriptLog%
369.
 
370.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v HostName /t REG_SZ /d "
371.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v HostName /t REG_SZ /d "" >> %ScriptLog%
372.
 
373.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v IPAddress /t REG_SZ /d %ipadr%"
374.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v IPAddress /t REG_SZ /d %ipadr% >> %ScriptLog%
375.
 
376.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v HWAddress /t REG_SZ /d "
377.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v HWAddress /t REG_SZ /d "" >> %ScriptLog%
378.
 
379.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v PortNumber /t REG_DWORD /d 9100"
380.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v PortNumber /t REG_DWORD /d 9100 >> %ScriptLog%
381.
 
382.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v SNMP Community /t REG_SZ /d public"
383.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Community" /t REG_SZ /d "public" >> %ScriptLog%
384.
 
385.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v SNMP Enabled /t REG_DWORD /d 00000001"
386.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Enabled" /t REG_DWORD /d 00000001 >> %ScriptLog%
387.
 
388.
	call :WRITELOG "REG ADD  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName% /v SNMP Index /t REG_DWORD /d 00000001"
389.
	REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%IPPortName%" /v "SNMP Index" /t REG_DWORD /d 00000001 >> %ScriptLog%
390.
 
391.
	echo\ >> %ScriptLog%
392.
	goto :eof
393.
 
394.
 
395.
:: ----------------------------------------------------------------------
396.
:STOP_START_SPOOLER
397.
:: ----------------------------------------------------------------------
398.
 
399.
	If defined Tst echo %TstInfoMsg% STOP_START_SPOOLER
400.
 
401.
:: 	Druckerwarteschlange anhalten/starten
402.
 
403.
	call :WRITELOG "Druckerwarteschlange anhalten..."
404.
	call :WRITELOG "CMD: net stop spooler"
405.
	net stop spooler >> %ScriptLog%
406.
	if %errorlevel% == 2 call :WRITELOG "Druckerwarteschlange bereits gestoppt"
407.
	call :WRITELOG "Druckerwarteschlange starten..."
408.
	call :WRITELOG "CMD: net start spooler"
409.
	net start spooler >> %ScriptLog%
410.
	goto :eof
411.
 
412.
 
413.
:: ----------------------------------------------------------------------
414.
:ADD_LOGICAL_PRINTER
415.
:: ----------------------------------------------------------------------
416.
 
417.
	If defined Tst echo %TstInfoMsg% ADD_LOGICAL_PRINTER
418.
 
419.
::  	Logischen Drucker einrichten
420.
 
421.
:: 	Syntax rundll32 printui.dll,PrintUIEntry
422.
:: 	/if		Installiert Drucker mit Hilfe der angegebenen INF-Datei
423.
:: 	/b[Name]	Basisdruckername wie er unter "Drucker und Faxgeraete" angezeigt wird
424.
:: 	/f[Datei]	Dateiname+Pfad der INF-datei
425.
:: 	/r[Anschluss]	Anschlussname (Standard TCP/IP-Port)
426.
:: 	/m[Modell]  	Modellname des Druckertreibers   
427.
:: 	/q 		Stiller Modus, Fehlermeldungen werden nicht angezeigt
428.
 
429.
	call :WRITELOG "Logischen Drucker %DruckerName% einrichten..."
430.
	call :WRITELOG "CMD: rundll32 printui.dll,PrintUIEntry /if /b %DruckerName% /f %TmpINFfile% /r %IPPortName% /m %TmpModellDruckerTreiber% /q"
431.
	rundll32 printui.dll,PrintUIEntry /if /b %DruckerName% /f %INFfile% /r"%IPPortName%" /m %ModellDruckerTreiber% /q
432.
	goto :eof
433.
 
434.
 
435.
:: ----------------------------------------------------------------------
436.
:SETTING_PRINTER
437.
:: ----------------------------------------------------------------------
438.
 
439.
	If defined Tst echo %TstInfoMsg% SETTING_PRINTER
440.
 
441.
::  	Druckereinstellungen einrichten
442.
 
443.
:: 	Syntax rundll32 printui.dll,PrintUIEntry
444.
:: 	/Xs		Richtet die Druckereinstellungen ein
445.
:: 	/n[Name]  	Druckername (wie er unter "Drucker und Faxgeraete" angezeigt wird)   
446.
:: 	/q 		Stiller Modus, Fehlermeldungen werden nicht angezeigt
447.
 
448.
	call :WRITELOG "Druckereinstellungen fuer %DruckerName% einrichten (Kommentar)..."
449.
	call :WRITELOG "CMD: rundll32 printui.dll,PrintUIEntry /q /Xs /n %DruckerName% Comment Created by ICFND_AddPrntr.CMD"
450.
	rundll32 printui.dll,PrintUIEntry /q /Xs /n %DruckerName% Comment "Created by ICFND_AddPrntr.CMD"
451.
	goto :eof
452.
 
453.
 
454.
:: ----------------------------------------------------------------------
455.
:PRINT_TESTPAGE
456.
:: ----------------------------------------------------------------------
457.
 
458.
	If defined Tst echo %TstInfoMsg% PRINT_TESTPAGE
459.
 
460.
:: 	Testseite ausdrucken / NUR FUER TESTZWECKE !!
461.
 
462.
:: 	Syntax rundll32 printui.dll,PrintUIEntry
463.
:: 	/n[Name]  	Druckername (wie er unter "Drucker und Faxgeraete" angezeigt wird)   
464.
:: 	/k 		Druckt eine Testseite auf dem angegebenen Drucker aus
465.
 
466.
	call :WRITELOG "Testseite auf %DruckerName% ausdrucken..."
467.
	call :WRITELOG "CMD: rundll32 printui.dll,PrintUIEntry /n %DruckerName% /k"
468.
	rundll32 printui.dll,PrintUIEntry /n %DruckerName% /k
469.
	echo\ >> %ScriptLog%
470.
	call :WRITELOG %LINE%
471.
	goto :eof
472.
 
473.
 
474.
:: ----------------------------------------------------------------------
475.
:CREATE_LOG_PATH
476.
:: ----------------------------------------------------------------------
477.
 
478.
	If defined Tst echo %TstInfoMsg% CREATE_LOG_PATH
479.
 
480.
::	Verzeichnis %LogPath% existiert nicht,
481.
::	Verzeichnis %LogPath% wird angelegt...
482.
	md %LogPath% 
483.
	goto :eof
484.
 
485.
	
486.
:: ----------------------------------------------------------------------
487.
:CLEANUP
488.
:: ----------------------------------------------------------------------
489.
 
490.
	If defined Tst echo %TstInfoMsg% CLEANUP
491.
 
492.
::  	Aufraeumen von nicht mehr benoetigten Dateien
493.
::	Diese Funktionalitaet wurde am 16.05.2008 nach Ruecksprache 
494.
::	mit der Paketierung bis auf Weiteres deaktiviert. 
495.
 
496.
	call :WRITELOG %LINE%
497.
	call :WRITELOG "Loeschen nicht mehr benoetigter Dateien..."
498.
::	call :WRITELOG "Loesche Verzeichnis %INFdir_PCL6%"
499.
::	rd /S /Q "%INFdir_PCL6%" >> %ScriptLog%
500.
::	Druckersprache PS Wird derzeit nicht genutzt:
501.
::	call :WRITELOG "Loesche Verzeichnis %INFdir_PS%"
502.
::	rd /S /Q "%INFdir_PS%" >> %ScriptLog%
503.
::	call :WRITELOG "Loesche Inputliste %InputListe%"
504.
::	del "%InputListe%" >> %ScriptLog%
505.
::	call :WRITELOG "Loesche Script %scriptdir%%sTitle%"
506.
::	Das eigentliche Script wird erst am Ende der Prozedur geloescht!
507.
::	Siehe Abschnitt ENDE_AUSGANG
508.
	goto :eof
509.
 
510.
:: ----------------------------------------------------------------------
511.
:WRITELOG
512.
:: ----------------------------------------------------------------------
513.
 
514.
::	Schreiben von Logmeldungen
515.
	>> %ScriptLog% echo %date% %time% - %~1
516.
	goto :eof
517.
 
518.
:: ----------------------------------------------------------------------
519.
:: *** Fehler-Ausgaenge des Scripts
520.
:: ----------------------------------------------------------------------
521.
 
522.
:FEHLER_LOGFILE
523.
::	Logfile kann nicht angelegt werden
524.
	call :WRITELOG "Errorlevel : %errorlevel%"
525.
	call :WRITELOG "ERROR: Fehler beim Anlegen der Log-Datei %ScriptLog% !"
526.
	call :WRITELOG "ERROR: %sTitle% kann nicht fortgesetzt werden."
527.
	echo ERROR: Fehler beim Anlegen der Log-Datei %ScriptLog% !	
528.
	echo ERROR: %sTitle% kann nicht fortgesetzt werden.
529.
	goto ENDE_AUSGANG
530.
 
531.
:FEHLER_SOURCEFILES
532.
::	Inputdateien fuer das Skript fehlen
533.
	call :WRITELOG "Errorlevel : %errorlevel%"
534.
	call :WRITELOG "ERROR: Fehlende Input-Dateien ("%INFfile%" oder '%InputListe%') !"
535.
	call :WRITELOG "ERROR: %sTitle% kann nicht fortgesetzt werden."
536.
	>> %ScriptLog% dir %scriptdir%
537.
	goto ENDE
538.
 
539.
:FEHLER_OS
540.
::	Client ist kein XP-Rechner
541.
	call :WRITELOG "ERROR: Auf diesem System laeuft nicht das Betriebssystem Microsoft Windows XP Professional"
542.
	For /F "Delims=" %%j in ('ver') do call :WRITELOG "Betriebssystem: %%j"
543.
	call :WRITELOG "ERROR: %sTitle% kann nicht fortgesetzt werden."
544.
	goto :ENDE
545.
 
546.
:: ----------------------------------------------------------------------
547.
:ENDE
548.
:: ----------------------------------------------------------------------
549.
 
550.
	If defined Tst echo %TstInfoMsg% ENDE
551.
 
552.
::	Bottomline in Logfile schreiben
553.
	call :WRITELOG %LINE%
554.
	call :WRITELOG "Ende %sTitle% on Node %ComputerName%"
555.
	call :WRITELOG %LINE%
556.
 
557.
:: ----------------------------------------------------------------------
558.
:ENDE_AUSGANG
559.
:: ----------------------------------------------------------------------
560.
 
561.
	If defined Tst echo %TstInfoMsg% ENDE_AUSGANG
562.
	If defined Tst PAUSE
Der Inhalt meiner Inputliste (rt.csv) sieht wie folgt aus: (Ich habe die mehrer hunderte Einträge rausgelöscht und nur den Problemfall dringelassen):

01.
 
02.
FILIALID;FILIALOZ;FILIALSCHLUESSEL;PLZ;ORT;STRASSE;ANZAHL;IPSWITCH;TERMIN_IPSWITCH;IPADRESSE;SUBNETZMASKE;IP_ROUTER;DOSENNUMMER;Druckername;STATUS_DOSE;STATUS_LANCONNECT;SYSTEMID;KOMPONENTEN_ID;SERIENNUMMER;STATUS_DRUCKER;TERMIN_ROLLOUT;HWPROFIL;SYSTEMROLLE;BEMERKUNG;URSPRUNGSDATEI;FEHLER
03.
...
04.
40077:32;8,2066E+11;4007732;12345;Berlin;Am Wilden Kaiser 29;2;;;10.179.169.44;255.255.255.224;10.179.169.62;;ABCDrucker1;;;D-001093;132158;0;RO-Planung;29.09.2008;XP0;NWK
05.
40077:32;8,2066E+11;4007732;12345;Berlin;Am Wilden Kaiser 29;2;;;10.179.169.46;255.255.255.224;10.179.169.62;;ABCDrucker2;;;D-001094;132159;0;RO-Planung;29.09.2008;XP0;NWK
06.
...
07.
07:41;8,40453E+11;741;96047;Bamberg;Heinstr. 1;2;n;;160.58.187.98;255.255.255.240;160.58.187.96;;ICFDrucker1;;;D-001311;132376;S2086505698;Betrieb;18.09.2008;XP0;NWK
08.
07:41;8,40453E+11;741;96047;Bamberg;Heinstr. 1;2;n;;160.58.187.99;255.255.255.240;160.58.187.96;;ICFDrucker2;;;D-001312;132377;S2086505678;Betrieb;18.09.2008;XP0;NWK
09.
...
Die Datei wurde mit Excel erstellt und als csv-Datei abgespeichert.


Ich bitte Euch um Eure Hilfe!
Danke
Flauschbobbel
Bitte warten ..
Ähnliche Inhalte
Windows Server
Server 2012 DNS AD DHCP. IP Adress Frage
Frage von maxrutzWindows Server1 Kommentar

Momentan hab ich zum Testen ein Server zuhause mit ESXI und winserver 2012. Ich habe ein Test Netzwerk gemacht ...

Router & Routing

Zugriff auf NAS in anderem IP-Adress Bereich

gelöst Frage von TorstenhofRouter & Routing12 Kommentare

Hallo liebe Forumsmitglieder Ich habe folgendes Problem mit einer Netzwerkkonfiguration: Netzwerk 1: IP Adressen 192.168.0.x Arbeitsplatzrechner und NAS Zugriff ...

LAN, WAN, Wireless

MAC Adress Finder bzw. Scanner (legal)

gelöst Frage von SchwarzerRieseLAN, WAN, Wireless9 Kommentare

Hallo zusammen, ich habe in meinem Heimnetzwerk (mit einer FritzBox als Modem & Router) folgendes "Problem": Irgendein Nachbar besitzt ...

Windows Tools

Cobra Adress Plus und Outlook

gelöst Frage von hartmann0Windows Tools8 Kommentare

Hallo, da ich durch Googlen leider einfach nichts finde, habe ich mich entschlossen, mich einfach mal hier an das ...

Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 2 TageniOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 2 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 4 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 5 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Windows Netzwerk
Kerio. Kann keine Mails empfangen aber senden. Wer ist schuld. Kerio oder Windows domäne?
gelöst Frage von frosch2Windows Netzwerk33 Kommentare

Hallo, es existiert ein Problem bei uns mit dem mailen. Alle bestehenden Nutzer können mailen. Raus wie rein. Neuen ...

Hosting & Housing
VMware VM mit über 1TB RAM für S4HANA
gelöst Frage von Leo-leHosting & Housing24 Kommentare

Hallo zusammen, wer hat Erfahrng und kann mir einen Tipp zum sizing von S4HANA Systemen geben? Wir möchten, zunächst ...

LAN, WAN, Wireless
WLAN und Ausmessung - Eine Glaubensfrage?
Frage von ptr2brainLAN, WAN, Wireless23 Kommentare

Liebe Experten, als Sys-Admin habe ich mir schon öfter die Frage gestellt, ob es sich beim Thema WLAN und ...

Virtualisierung
Gebrauchte Server Hardware als Virtualisierungs-"Spielwiese"?
Frage von NixVerstehenVirtualisierung19 Kommentare

Einen wunderschönen guten Morgen zusammen, ich möchte mich gerne etwas tiefer mit dem Thema Virtualisierung beschäftigen und dazu ein ...