Verwandte Beiträge
- Windows Server 2003 Service Pack 2 (5)
- Windows Server 2003 R2 - Fritz!Fax faxt nur 1 mal (5)
- Windows Server 2003 - Druckerfreigabe (3)
- Windows Server 2008 integration in eine Server 2003 Domäne (4)
- Windows Server 2008 mit Apache (8)
- Windows Server 2008 DNS Client sperrt Seiten (z.B. microsoft.com) (5)
- Exchange 2007 SP1 auf Windows Server 2008 R2 in Betrieb nehmen (7)
- SCSI Festplatten bei Windows Server 2003 installtion nicht erkannt (6)
- RPC over HTTP - Unter Windows Server 2008 und Exchange 2007 (3)
- Windows Server Sicherung (2008 R2) Fehler 0x80070070 nicht genug Speicherplatz (2)
- Image von Strato Windows-Server (3)
- Proxy Server auf Windows Server Enterprise 2003 (13)
- Windows Server 2003 zu Windows Server 2008 (2)
- 4 Doppelkerne und Windows Server 2008 Standard 1-4 CPU (8)
- Windows Server 2008 R2 Boot Probleme nach Backupversuch (7)
- Windows Server 2003 geht nicht in Ruhezustand obwohl er auf 10 min eingestellt ist (4)
- Netzwerkperformance Windows Server 2008 RC2 und Windows 7 (2)
- Standardprofil für Windows 7 in einer Windows Server 2003 Umgebung (5)
- Windows Server - Internet Explorer Sicherheitsrichtlinien (5)
- mehr >>
Anleitung im Bereich
Druckkontingentierung auf Windows Servern mit Boardwerkzeugen/Freewaretools
Geschrieben von gogoflash am 2006/02/11 um 18:53:09 Uhr, 5 Antworten, 17888 Aufrufe
Anhand eines Projektes zur Kontingentierung von Druckseiten auf Windows Servern wird gezeigt, wie man das Eventlog filtert und daraus mit einfachsten Mitteln Informationen daraus ziehen kann. Falls der Nutzer das Kontingent überschritten hat, wird im das Recht zum Drucken verweigert.Genutzt werden hierzu die Batchbefehle unter DOS.
Kontigentierung
1) Auslesen der User (Personen) aus dem Active Directory. Die Namen werden in eine Userlist.txt ausgegeben. Hiermit kann später das Drucklog nach Usern gefiltert werden.
2) Herausfiltern bestimmter Nutzer. Entweder weil sie bereits gesperrt wurden, oder weil sie nicht unter dem Kontingent leiden sollen.
3) Mit DUMPEL wird das Eventlog seit Monatsbeginn ausgelesen, explizit werden dabei die Druckereignisse herausgefiltert.Um die Tage seit Monatsbeginn auszulesen, wird das getalldatetimevar.cmd von BIBER genutzt.
4) Herausfiltern der einzelnen Drucker anhand der Portbezeichnung
5) Die Ausgabe von DUMPEL wird formatiert. Für jeden User wird eine Datei angelegt in der die bisher gedruckten Seiten drinstehen. (Das Filtern erfolgt mit SED)
6) Addition der einzelnen Seiten und Prüfung auf Kontingentüberschreitung.
7) Maßnahmen bei Kontingentüberschreitung E-Mail Benachrichtigung, Desktopbenachrichtigung, Sperrung des Druckers durch Rechte setzen.
8) Erstellung von Nutzerinformationen und einer Statistik, um sie zum Beispiel von KIX bei der Anmeldung auszulesen.
9) Eintüten in Subroutinen und Schleifen.
10) Batch mit allem zusammen.
11) Abfallprodukte:
Als kleines vorläufiges Abfallprodukt entsteht ein kleines Script, dass den Admin oder User über bestimmte Events per Mail informiert.Hieraus entstanden..
Vielleicht kann man ja daraus mehr machen.
Dieses Skript sollte natürlich mehrmals am Tag durchlaufen um eine zeitnahe Protokollierung zu erhalten. Es gibt einige Freewareprogramme, die dieses Skript jede Minute ausführen können.
--------- Ablauf Ende ----------------
Fangen wir an.
Ausgelesen wird aus der Domäne.de und den OUs OU=hinten, ou=berlin; nur Objekte die Person sind.
Genutzt wird dazu ldifde, was auf jedem Windows Server zufinden ist. (NT weiß ich nicht)
Gibt uns folgendes aus:
Interessieren tun uns nur die samaccountName: Einträge. Diese Filtern wir folgender Maßen aus.
Jetzt haben wir eine Liste (userlistall.txt) die so aussieht.
So sehen die beiden Dateien aus:
Userlist.txt :
Gesperrt.txt
gibt uns mit diesem Code
Eine userlist.txt mit den erlaubten Nutzern:
Dieser Nutzer waren bisher nicht gesperrt und werden jetzt ausgewertet.
-d 10 steht für die letzten 10 Tage.
-e 10 steht für die EventID
-l System für Systemlog (Application wenn man in diesem Log was suchen möchte)
-m print Eventname
Mit dem getalldatetimesvar.cmd vom Biber kann man die Tage per %dd% übergeben.
Die Ausgabe sieht dann so aus:
In der dritten Spalte wird der Nutzer angegeben. In der letzten Spalte die gedruckten Seiten.
In der drittletzten Spalte steht der Name des Druckports, davor der Druckername.
Eine Auswertung mit
bei den Einträgen von Microsoft aufgrund einer zusätzlichen Spalte (Microsoft [Leerzeichen]Powerpoint) nur Müll aus.
Erstmal filtern wir nach dem Druckerport, das sollte der Drucker sein der Kontingentiert werden soll.
Wir filtern nach dem 172.22.44.71 Port, das ist ziemlich billig, durch FIND zu machen.
Die Ausgabe in der druckport Datei sieht dann so aus (die FIND Einträge hab ich jetzt mal nicht mitgenommen)
Ausgabe in userA
Was wir jetzt machen müssen, ist die letzte Spalte rauszufiltern. Dies machen wir in mehreren Schritten.
Mithilfe von SED (gleich kommt die Aufklärung)
Mit diesem Befehl wird alles was vor IP_172.22.44.71 in UserA ausgeschnitten inkl IP_172.22.44.71
sieht die Ausgabe in der UserA Datei aus:
Jetzt schneide ich die ersten beiden Spalten aus:
UserA3 Datei sieht so aus:
Was wir jetzt haben ist eine Liste für jeden User in der die Anzahl der Druckseiten drinsteht. Jetzt muss nur noch die Zahl addiert werden und mit einem Kontingent verglichen werden.
Diese mehreren Schritte lassen sich auf einen Einzeiler reduzieren, der ohne Zwischendateien arbeitet.
Zum Addieren wird der SET Befehl unter DOS benutzt. (Boardwerkzeug)
Nutzer in eine gesperrt.txt einfügen:
Sperrung des Druckers Methode A
Sperrung des Druckers Methode B
Gruppe erstellen. Dieser Gruppe die Rechte am Drucker verweigern und den gewünschten User in diese Gruppe einfügen.Dies Funktioniert meines Wissens und laut meiner Server auch nur auf Domänencontroller.
E-Mail Benachrichtigung mit blat:
SMTP Server 172.22.44.xxx und Blindcopy an Admin.
In Arbeit.
Und den ganzen Kram in Subroutinen stellen.
Wie man das macht sieht man in diesem guten Tutorial:
http://www.administrator.de/HowTo_-_Wie_m ...
10) Eintüten ins System.
Die Hauptdatei kann als Geplanter Task ausgeführt werden.
Am ersten eines Monats, sollte man falls man Methode B zur Sperrung genutzt hat. Die gesperrten Nutzer aus der Gruppe entfernen.
Hier wird das Eventlog des letzten Tages (-d 1) vom Server (\\Servername), mit der EventID 10 und Eventname Print aus dem Systemlog an den admin geschickt.
Läßt sich bestimmt leicht anpassen.
Per "Wiederkehrenden Task" kann dies einmal am Tag ablaufen. Willst Du über die Events schnell informiert werden und sie auch nicht doppelt und dreifach bekommen, muss es natürlich angepasst werden. Frag einfach mal nach.
Weitere Anpassungen und Anregungen werden gerne in das Script aufgenommen.
Freue mich auf eine Diskussion.
Hier zur Diskussion:
http://www.administrator.de/Druckkontinge ...
Ich danke hiermit auch dem freundlichen BIBER für seine Optimierungen des Codes und seine Vorschläge.
Gruß Miguel
http://www.microsoft.com/windows2000/tech ...
BLAT
http://www.blat.net/
SED
http://www.windowsitpro.com/Articles/Inde ...
VAR SET
http://home.mnet-online.de/horst.muc/germ ...
Subinacl
http://www.microsoft.com/downloads/detail ...
Inhaltsverzeichnis
--------- Ablauf ----------------
Ablauf bevor ein paar Codeschnippsel gezeigt werden.1) Auslesen der User (Personen) aus dem Active Directory. Die Namen werden in eine Userlist.txt ausgegeben. Hiermit kann später das Drucklog nach Usern gefiltert werden.
2) Herausfiltern bestimmter Nutzer. Entweder weil sie bereits gesperrt wurden, oder weil sie nicht unter dem Kontingent leiden sollen.
3) Mit DUMPEL wird das Eventlog seit Monatsbeginn ausgelesen, explizit werden dabei die Druckereignisse herausgefiltert.Um die Tage seit Monatsbeginn auszulesen, wird das getalldatetimevar.cmd von BIBER genutzt.
4) Herausfiltern der einzelnen Drucker anhand der Portbezeichnung
5) Die Ausgabe von DUMPEL wird formatiert. Für jeden User wird eine Datei angelegt in der die bisher gedruckten Seiten drinstehen. (Das Filtern erfolgt mit SED)
6) Addition der einzelnen Seiten und Prüfung auf Kontingentüberschreitung.
7) Maßnahmen bei Kontingentüberschreitung E-Mail Benachrichtigung, Desktopbenachrichtigung, Sperrung des Druckers durch Rechte setzen.
8) Erstellung von Nutzerinformationen und einer Statistik, um sie zum Beispiel von KIX bei der Anmeldung auszulesen.
9) Eintüten in Subroutinen und Schleifen.
10) Batch mit allem zusammen.
11) Abfallprodukte:
Als kleines vorläufiges Abfallprodukt entsteht ein kleines Script, dass den Admin oder User über bestimmte Events per Mail informiert.Hieraus entstanden..
Vielleicht kann man ja daraus mehr machen.
Dieses Skript sollte natürlich mehrmals am Tag durchlaufen um eine zeitnahe Protokollierung zu erhalten. Es gibt einige Freewareprogramme, die dieses Skript jede Minute ausführen können.
--------- Ablauf Ende ----------------
Fangen wir an.
Auslesen der Benutzer in einer OU im AD
Erstmal müssen wir eine Nutzerliste erstellen, diese brauchen wir, um die Ausgabe nach den Nutzern zu filtern. Es empfiehlt sich, die bei jedem Durchlauf durchzuführen, es können ja schnell neue Nutzer angelegt werden.Ausgelesen wird aus der Domäne.de und den OUs OU=hinten, ou=berlin; nur Objekte die Person sind.
Genutzt wird dazu ldifde, was auf jedem Windows Server zufinden ist. (NT weiß ich nicht)
01.
ldifde -f ExportUsers.ldf -s DC -d "ou=hinten,ou=Berlin,dc=domäne,dc=de" -p subtree -r "(objectClass=person)" -l "SamAccountName"Gibt uns folgendes aus:
01.
dn: CN=,OU=hinten,OU=Berlin,DC=domäne,DC=de 02.
changetype: add 03.
sAMAccountName: userA 04.
05.
dn: CN=Ab,OU=hinten,OU=Berlin,DC=domäne,DC=de 06.
changetype: add 07.
sAMAccountName: userBInteressieren tun uns nur die samaccountName: Einträge. Diese Filtern wir folgender Maßen aus.
01.
for /f "tokens=2 delims= " %%a in ('find "sAMAccountName:" ExportUsers.ldf ') do (echo %%a>> userlistall.txt)Jetzt haben wir eine Liste (userlistall.txt) die so aussieht.
01.
UserA 02.
UserBAnhand einer gesperrt.txt Datei (diese wird vom Skript erzeugt wollen wir bestimmte Nutzer rausfiltern). Diese werden beim Durchlauf nicht mehr berücksichtigt.
So sehen die beiden Dateien aus:
Userlist.txt :
01.
UserA 02.
UserB 03.
UserCGesperrt.txt
01.
UserCgibt uns mit diesem Code
01.
IF EXIST gesperrt.txt for /f %%x in (%userinfo%\%druckport%\gesperrt.txt) DO call :userf %%x 02.
Goto:eof 03.
:userf 04.
for /f "skip=2 tokens=1 delims= " %%a in ('find /V "%1" userlistall.txt') do (echo %%a >> userlist.txt) 05.
goto :eofEine userlist.txt mit den erlaubten Nutzern:
01.
UserA 02.
UserBDieser Nutzer waren bisher nicht gesperrt und werden jetzt ausgewertet.
Mithilfe von Dumpel das Printlog auslesen.
01.
dumpel -f d:\drucker.log -m print -t -s \\Druckserver -l System -e 10 -format s -d 10-e 10 steht für die EventID
-l System für Systemlog (Application wenn man in diesem Log was suchen möchte)
-m print Eventname
Mit dem getalldatetimesvar.cmd vom Biber kann man die Tage per %dd% übergeben.
Die Ausgabe sieht dann so aus:
01.
44 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 481437 1 02.
46 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 93056 1 03.
48 VEpdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 142196 1 04.
50 VE_Ban.pdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 139116 1 05.
4 Microsoft PowerPoint - 20060201_.ppt UserB Canon iR C3200 PCL5c IP_172.22.44.71 50997 1 06.
58 VE_Ban1.pdf UserA Canon iR C3200 PCL5c IP_172.22.44.88 139116 1In der dritten Spalte wird der Nutzer angegeben. In der letzten Spalte die gedruckten Seiten.
In der drittletzten Spalte steht der Name des Druckports, davor der Druckername.
Auswertung der Ausgabe von DUMPEL.
Eine Auswertung mit
01.
for /f "tokens=3,8 delims= " %%a in (drucker.log) do (echo %%a;%%b>> Logdatei.txt) Erstmal filtern wir nach dem Druckerport, das sollte der Drucker sein der Kontingentiert werden soll.
Wir filtern nach dem 172.22.44.71 Port, das ist ziemlich billig, durch FIND zu machen.
01.
find "IP_172.22.44.71" druck.log > druckportDie Ausgabe in der druckport Datei sieht dann so aus (die FIND Einträge hab ich jetzt mal nicht mitgenommen)
01.
44 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 481437 1 02.
46 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 93056 1 03.
48 VEpdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 142196 1 04.
50 VE_Ban.pdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 139116 1 05.
4 Microsoft PowerPoint - 20060201_.ppt UserB Canon iR C3200 PCL5c IP_172.22.44.71 50997 1Ausfiltern vom User.
Erstmal filtern wir nach einem User.01.
find "userA" drucker.log > userAAusgabe in userA
01.
44 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 481437 1 02.
46 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 93056 1 03.
48 VEpdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 142196 1 04.
50 VE_Ban.pdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 139116 1Was wir jetzt machen müssen, ist die letzte Spalte rauszufiltern. Dies machen wir in mehreren Schritten.
Mithilfe von SED (gleich kommt die Aufklärung)
01.
SED -e "s/^.*IP_172.22.44.71 /SET /p" -e "d" <userA > userA2sieht die Ausgabe in der UserA Datei aus:
01.
SET 481437 1 02.
SET 93056 1 03.
SET 142196 1 04.
SET 139116 1Jetzt schneide ich die ersten beiden Spalten aus:
01.
for /f "tokens=1,2,3 delims= " %%a in (userA2) DO (echo %%c >>userA3)UserA3 Datei sieht so aus:
01.
1 02.
1 03.
1 04.
1Was wir jetzt haben ist eine Liste für jeden User in der die Anzahl der Druckseiten drinsteht. Jetzt muss nur noch die Zahl addiert werden und mit einem Kontingent verglichen werden.
Diese mehreren Schritte lassen sich auf einen Einzeiler reduzieren, der ohne Zwischendateien arbeitet.
01.
for /f "tokens=1,2,3 delims= " %%a in ('find "userA" drucker.log^|SED -e "s/^.*IP_172.22.44.71 /SET /p" -e "d"') DO (echo %%c >> userA)Addieren der Inhalte von UserA und mit einem Kontingent vergleichen.
Falls es überschritten wird, können dann Maßnahmen getroffen werden. Gleichzeitig wird für jeden Nutzer eine Datei erstellt in der die Gesamtzahl der Seiten drinsteht. Dies kann man z.B. per KIX dann auslesen, um den Nutzer über sein Kontingent zu informieren.Zum Addieren wird der SET Befehl unter DOS benutzt. (Boardwerkzeug)
01.
REM Kontingent festlegen 02.
set kontigent=100 03.
for /f %%a in (userA) DO call :inner %%a 04.
:inner 05.
REM Hochzählen bedeutet zahl=zahl+%1 06.
Set /a "Zahl+=%1" 07.
REM Infos fuer Späteres KIx auslesen erzeugen 08.
echo %user% %zahl% > %userinfo%\%druckport%\%user% 09.
10.
REM Abbruchbedingung eingefügt, damit Schleife nicht unnötig lang 11.
REM durchgelaufen wird 12.
13.
IF %abbruch%==-1 goto :endin 14.
15.
REM Falls Kontigent überschritten wird die Subroutine Abfertigen aufgerufen 16.
IF %kontingent% LEQ %Zahl% call :abfertigen 17.
18.
:endin 19.
20.
goto :eofMaßnahmen
Nutzer in eine gesperrt.txt einfügen:
01.
echo %user% >> %userinfo%\%druckport%\gesperrt.txt01.
net send %user% Kontigent erschöpftSperrung des Druckers Methode A
01.
subinacl /printer %printer% /deny=domäne\%user%=FSperrung des Druckers Methode B
Gruppe erstellen. Dieser Gruppe die Rechte am Drucker verweigern und den gewünschten User in diese Gruppe einfügen.Dies Funktioniert meines Wissens und laut meiner Server auch nur auf Domänencontroller.
01.
Net group gruppenname %user% /add SMTP Server 172.22.44.xxx und Blindcopy an Admin.
01.
blat -installSMTP 172.22.44.xxx drucker@domaene.de 02.
blat zuviel.txt -to %user%@domaene.de -bc admin@domaene.de -s "Kontingentüberschreitung auf Drucker XYZ" 03.
04.
In der zuviel.txt Datei liegt der Textbody der zu versenden ist.In Arbeit.
Große Schleife und Subroutinen
Mit Hilfe der userlist.txt kann ich den gesamten Kram in eine große Schleife pumpen.01.
for /f %%x in (userlist.txt) do (set user=%%x && call :sua) 02.
:eof 03.
:sua 04.
.... Mach was..... 05.
:eofUnd den ganzen Kram in Subroutinen stellen.
Wie man das macht sieht man in diesem guten Tutorial:
http://www.administrator.de/HowTo_-_Wie_m ...
Alles zusammen (Beta Version mit vielen Zwischendateien und Tempdateien):
01.
REM Druckkontigent V 0.02 Datum:10.02.06 02.
03.
REm Verzeichnisse vorbereiten 04.
05.
set stamm=d:\scripte\drucker 06.
set temp1=%stamm%\temp1 07.
set temp2=%stamm%\temp2 08.
set logpfad=%stamm%\log 09.
set userinfo=%stamm%\user 10.
md %temp1% 11.
md %temp2% 12.
md %logpfad% 13.
md %userinfo% 14.
del %logpfad%\userlist.txt 15.
16.
REM Kontigent setzen 17.
set kontingent=100 18.
19.
REM Variablen setzen fuer AD 20.
REM Domänencontroller 21.
set domainc=Server-DC 22.
REM Domänenname 23.
set dc1=domaene 24.
set dc2=de 25.
REM OU Informationen 26.
set ou1=Berlin 27.
set ou2=User 28.
29.
REm Variablen fuer Drucker setzen 30.
REM Druckerport 31.
set druckport=hplj4100 32.
REM Drucker UNC 33.
set printer=\\Printserver\pr-hplj4100 34.
REM Printserver (wo liegt die Logdatei) 35.
set server=\\Printserver 36.
REM ------------------------------------- 37.
38.
getalldatetimevar.cmd /s 39.
40.
REM Aufspaltung in Main und Subroutinen 41.
call :main 42.
goto :end 43.
44.
45.
REM ------------------------------------- 46.
REM Subroutinen 47.
:main 48.
md %userinfo%\%druckport% 49.
50.
REM Jetzt gehts Los 51.
52.
REM Auslesen der Tage seit MOnatsbeginn wird benötigt für DUmpel 53.
REM Noch zu machen 54.
55.
REM Auslesen der Benutzer für Filter 56.
ldifde -f %logpfad%\ExportUsers.ldf -s "%domainc%" -d "ou=%ou2%,ou=%ou1%,dc=%dc1%,dc=%dc2%" -p subtree -r "(objectClass=person)" -l "SamAccountName" >> %logpfad%\log.txt 57.
REM Die Ausgabe muß nach Accountnamen gefilter werden 58.
find "sAMAccountName:" %logpfad%\ExportUsers.ldf > %logpfad%\userlist.tmp 59.
REM AUschneiden der ersten 2 Zeilen die durch find reinkommen 60.
for /f "skip=2 tokens=2 delims= " %%a in (%logpfad%\userlist.tmp) do (echo %%a>> %logpfad%\userlist.txt) 61.
del %logpfad%\userlist.tmp 62.
del ldif.log 63.
del %logpfad%\ExportUsers.ldf 64.
REM Userlistall.txt enthält alle Nutzer aus der OU 65.
copy %logpfad%\userlist.txt %logpfad%\userlistall.txt 66.
67.
REM Rausfiltern der bereits gesperrten User (siehe Subroutinen TEil) 68.
REM Wird benötigt um Benutzer nicht mehrmals zu benachrichtigen 69.
IF EXIST %userinfo%\%druckport%\gesperrt.txt for /f %%x in (%userinfo%\%druckport%\gesperrt.txt) DO call :userf %%x 70.
71.
REM Druckprotokoll auswerten 72.
REM Zur Zeit -d 10 für 10 Tage 73.
dumpel -f %logpfad%\druck.log -m print -c -s \\debe-as-01 -l system -e 10 -d %dd% -format s 74.
REM Drucker rausfiltern 75.
find "%druckport%" %logpfad%\druck.log > %logpfad%\%druckport% 76.
del %logpfad%\druck.log 77.
78.
79.
REM Berechnung durchführen (siehe Subroutinen Teil) 80.
81.
for /f %%x in (%logpfad%\userlist.txt) do (set user=%%x && call :rech) 82.
83.
84.
REM Statistik 85.
REM Ausgabe einer Liste über Druckaufkommen 86.
for /f %%x in (%logpfad%\userlistall.txt) do (set user=%%x && call :statistik) 87.
goto :eof 88.
89.
REM ------------------------------------- 90.
:rech 91.
REM Ausgabe so filtern, dass nur noch Dokumentenzahl drinsteht 92.
find "%user%" %logpfad%\%druckport% > %temp1%\%user% 93.
SED -e "s/^.*"%druckport%" /SET /p" -e "d" <%temp1%\%user% >%temp2%\%user% 94.
del %temp1%\%user% 95.
REM In der Logdatei die Zeitenzahlen rausfiltern und in %temp1% ausgeben 96.
for /f "tokens=1,2,3 delims= " %%a in (%temp2%\%user%) DO (echo %%c >>%temp1%\%user%) 97.
del %temp2%\%user% 98.
99.
REM Addieren der Seitenzahlen 100.
set /A "zahl=0" 101.
set /A "abbruch=0" 102.
for /f %%a in (%temp1%\%user%) DO call :inner %%a 103.
:inner 104.
Set /a "Zahl+=%1" 105.
106.
REM Infos fuer Späteres KIx auslesen erzeugen 107.
echo %user% %zahl% > %userinfo%\%druckport%\%user% 108.
109.
REM Abbruchbedingung Eingefügt, damit Schleife nicht unnötig lang durchgelaufen wird 110.
IF %abbruch%==-1 goto :endin 111.
112.
REM Falls Kontigent überschritten wird die Subroutine Abfertigen aufgerufen 113.
IF %kontingent% LEQ %Zahl% call :abfertigen 114.
115.
:endin 116.
117.
goto :eof 118.
119.
REM ENDE von RECH 120.
REM ------------------------------------- 121.
REM gesperrte Nutzer rausfiltern 122.
:userf 123.
find /V "%1" %logpfad%\userlist.txt > %logpfad%\userlist.tmp 124.
del %logpfad%\userlist.txt 125.
for /f "skip=2 tokens=1 delims= " %%a in (%logpfad%\userlist.tmp) do (echo %%a >> %logpfad%\userlist.txt) 126.
del %logpfad%\userlist.tmp 127.
goto :eof 128.
129.
REM ------------------------------------- 130.
REM Was soll mit den passieren die das Kontigent überschritten haben 131.
:abfertigen 132.
set /a "abbruch=-1" 133.
echo %user% >> %userinfo%\%druckport%\gesperrt.txt 134.
REM net send %user% Kontigent erschöpft 135.
REM Sperrung zur Sicherheit auskommentiert 136.
REM subinacl /printer %printer% /deny=%dc%\%user%=F 137.
:goto :eof 138.
139.
REM ------------------------------------- 140.
REM Ausgabe der Statistik 141.
:statistik 142.
for /f "tokens=1,2 delims= " %%a in (%userinfo%\%druckport%\%user%) DO (IF NOT %%b==0 echo %%a %%b >> "%userinfo%\%druckport%.txt") 143.
:goto :eof 144.
REM ------------------------------------- 145.
:end10) Eintüten ins System.
Die Hauptdatei kann als Geplanter Task ausgeführt werden.
Am ersten eines Monats, sollte man falls man Methode B zur Sperrung genutzt hat. Die gesperrten Nutzer aus der Gruppe entfernen.
01.
net group Gruppenname %user% /deleteAbfallprodukte:
Benachrichtigung über bestimmte Events per Mail
Hier wird das Eventlog des letzten Tages (-d 1) vom Server (\\Servername), mit der EventID 10 und Eventname Print aus dem Systemlog an den admin geschickt.
Läßt sich bestimmt leicht anpassen.
Per "Wiederkehrenden Task" kann dies einmal am Tag ablaufen. Willst Du über die Events schnell informiert werden und sie auch nicht doppelt und dreifach bekommen, muss es natürlich angepasst werden. Frag einfach mal nach.
01.
dumpel -f eventlog.log -m print -c -s \\Servername -l system -e 10 -d 1 02.
blat -installSMTP 172.22.44.4 servername@domane.de 03.
IF EXIST eventlog.log blat eventlog.log -to admin@domaene.de -s "Infos über Event"Weitere Anpassungen und Anregungen werden gerne in das Script aufgenommen.
Freue mich auf eine Diskussion.
Hier zur Diskussion:
http://www.administrator.de/Druckkontinge ...
Ich danke hiermit auch dem freundlichen BIBER für seine Optimierungen des Codes und seine Vorschläge.
Gruß Miguel
Softwarequellen:
Dumpel (Printlog ausgeben)http://www.microsoft.com/windows2000/tech ...
BLAT
http://www.blat.net/
SED
http://www.windowsitpro.com/Articles/Inde ...
VAR SET
http://home.mnet-online.de/horst.muc/germ ...
Subinacl
http://www.microsoft.com/downloads/detail ...
Veröffentlichen Sie diesen Beitrag in Ihrem sozialen Netzwerk
5 Antworten
2
heffa schreibt am 2006/03/09 um 09:44:47 Uhr
Hallo,
hast du nett gemacht und gut erklärt... Danke!
ich möchte noch auf diese schlüsselfertige und schöne Lösung hinweisen: http://www.syneticon.net/service/w2k/druc ...
Bietet unter anderem eine grafische Auswertung in Excel... manche Chefs schätzen so etwas sehr
Schöne Grüsse Heffa
hast du nett gemacht und gut erklärt... Danke!
ich möchte noch auf diese schlüsselfertige und schöne Lösung hinweisen: http://www.syneticon.net/service/w2k/druc ...
Bietet unter anderem eine grafische Auswertung in Excel... manche Chefs schätzen so etwas sehr
Schöne Grüsse Heffa
3
gogoflash schreibt am 2006/06/08 um 16:39:59 Uhr
Hallo,
ich hab mir mal die schlüsselfertige Lösung angesehen. Sie ist recht gut und gibt eine umfangreiche Aufstellung der Druckmengen.
Im gegensatz zu meiner Lösung ist hier nur eine Auswertung möglich und keine Sperrung bei Überschreiten von den Kontigenten. (Läßt sich sicherlich auch noch ins Makro einbauen)
Gruß Miguel
ich hab mir mal die schlüsselfertige Lösung angesehen. Sie ist recht gut und gibt eine umfangreiche Aufstellung der Druckmengen.
Im gegensatz zu meiner Lösung ist hier nur eine Auswertung möglich und keine Sperrung bei Überschreiten von den Kontigenten. (Läßt sich sicherlich auch noch ins Makro einbauen)
Gruß Miguel
5
Peter161 schreibt am 2009/06/30 um 13:55:14 Uhr
Wirklich toll, bin wirklich interessiert. Wäre aber ganz nett, wenn du alles mal in einen Ordner packen könntest und den Zippen und mir vielleicht per mail zukommen lassen. Denn bsp die getalldatetimevar.... und die SED kann ich nicht finden. Vielen Dank. Ich schick dir meine Mailadresse per PN.
Vielen Dank...
Peter
Vielen Dank...
Peter





gutes Konzept und ein Super-Beispiel dafür, was sich mit viel Ideen und ohne viel Programmierung (ohne auf C# oder .NET zurückzugreifen) erreichen lässt.
Mal sehen - vielleicht kann ich Dir mithelfen, es noch ein wenig modularer/flexibler zu gestalten - dann ließen sich damit auch andere Logfiles (vor allem das EventLog!!) durchflöhen.
Danke!
Frank / der Biber aus Bremen