Druckkontigentierung mittels Batch Dateien (Tutorialvorbereitung)
Versuche mittels Windows Boardmitteln eine Druckkontigentierung einzurichten.
Hallo,
ich stelle eine Betaversion einer Batchdatei zur Diskussion.
Ziel soll es sein daraus eine stabile Lösung für eine Druckkontigentierung zu geben.
Eine Lauffähige Version wir am Ende gepostet.
Auch am Ende werden die Quellen der Tools angegeben.Alles Freeware!? (Das muß noch geprüft werden).
[EDIT]
Tutorial liegt unter
Druckkontingentierung auf Windows Servern mit Boardwerkzeugen/Freewaretools
Plan ----------------
Kurz skizziert der 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) Mit dumpel wird das Drucklog seit Monatsbeginn ausgelesen.Ausgabe in druck.log
3) 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 seb)
4) Prüfung auf Kontigentüberschreitung. Falls ja Entzug der Rechte auf den Drucker
Dieses Skripte sollte natürlich mehrmals am Tag durchlaufen um eine Zeitnahe Protokollierung zu erhalten.
Plan ----------------
Zu 1) Auslesen der Benutzer in einer OU im AD
Ausgelesen werden aus der Domäne.de OU=hinten,ou=berlin; nur Objecte die person sind.
ldifde -f ExportUsers.ldf -s DC -d "ou=hinten,ou=Berlin,dc=domäne,dc=de" -p subtree -r "(objectClass=person)" -l "SamAccountName"</font>
Gibt uns folgendes aus:
Interessieren tuen uns nur die samaccountName: einträge
Jetzt haben wir eine Liste (userlist.txt) die so aussieht.
Schritt 2) Mithilfe von Dumpel das Printlog auslesen.
-d 10 steht für die letzten 10 Tage.
Mit dem getalldatetimesvar.cmd vom Biber kann man das bestimmt eingreifen.
Die Ausgabe sieht dann so aus:
In der dritten Spalte wird der Nutzer angegeben. In der letzten Spalte die gedruckten Seiten.
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 einem User.
Ausgabe in userA
Mithilfe von sed (gleich kommt die Aufklärung)
Mit diesem Befehl wird alles was vor IP_172.22.44.71 in userA ausgeschnitten inkl 172.22.44.71
SED bekommt man ..... (nachreichen !!!!)
sieht die Ausgabe so aus:
Jetzt scheide ich die ersten beiden Spalten aus:
UserA3 Datei sieht so aus:
3) Addieren der Inhalte von UserA3 und mit einem Kontigent vergleichen.
Falls überschritten wird mit subinacl die Rechte am Drucker entzogen.
Dazu nutze ich varset (Auch Quelle angeben)
4) Grobe Schleife:
Mit Hilfe der userlist.txt kann ich den gesamten Kram in eine große Schleife pummen.
5) Alles zusammen:
Gruß Miguel
Softwarequellen:
Dumpel (Printlog ausgeben)
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/dum ...
SED
http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=5697
VAR SET
http://home.mnet-online.de/horst.muc/german.htm
Subinacl
http://www.microsoft.com/downloads/details.aspx?FamilyID=e8ba3e56-d8fe- ...
Hallo,
ich stelle eine Betaversion einer Batchdatei zur Diskussion.
Ziel soll es sein daraus eine stabile Lösung für eine Druckkontigentierung zu geben.
Eine Lauffähige Version wir am Ende gepostet.
Auch am Ende werden die Quellen der Tools angegeben.Alles Freeware!? (Das muß noch geprüft werden).
[EDIT]
Tutorial liegt unter
Druckkontingentierung auf Windows Servern mit Boardwerkzeugen/Freewaretools
Plan ----------------
Kurz skizziert der 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) Mit dumpel wird das Drucklog seit Monatsbeginn ausgelesen.Ausgabe in druck.log
3) 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 seb)
4) Prüfung auf Kontigentüberschreitung. Falls ja Entzug der Rechte auf den Drucker
Dieses Skripte sollte natürlich mehrmals am Tag durchlaufen um eine Zeitnahe Protokollierung zu erhalten.
Plan ----------------
Zu 1) Auslesen der Benutzer in einer OU im AD
Ausgelesen werden aus der Domäne.de OU=hinten,ou=berlin; nur Objecte die person sind.
ldifde -f ExportUsers.ldf -s DC -d "ou=hinten,ou=Berlin,dc=domäne,dc=de" -p subtree -r "(objectClass=person)" -l "SamAccountName"</font>
Gibt uns folgendes aus:
dn: CN=###,OU=hinten,OU=Berlin,DC=domäne,DC=de
changetype: add
sAMAccountName: userA
dn: CN=Ab,OU=hinten,OU=Berlin,DC=domäne,DC=de
changetype: add
sAMAccountName: userB
Interessieren tuen uns nur die samaccountName: einträge
find "sAMAccountName:" ExportUsers.ldf > userlist.tmp
REM Entfernen der sAMAccountName: Spalte
for /f "tokens=2 delims= " %%a in (userlist.tmp) do (echo %%a>> userlist.txt)
Jetzt haben wir eine Liste (userlist.txt) die so aussieht.
UserA
UserB
Schritt 2) Mithilfe von Dumpel das Printlog auslesen.
dumpel -f d:drucker.log -m print -t -s \Druckserver -l system -e 10 -format s -d 10
Mit dem getalldatetimesvar.cmd vom Biber kann man das bestimmt eingreifen.
Die Ausgabe sieht dann so aus:
44 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 481437 1
46 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 93056 1
48 VEpdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 142196 1
50 VE_Ban.pdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 139116 1
4 Microsoft PowerPoint - 20060201_.ppt UserB Canon iR C3200 PCL5c IP_172.22.44.71 50997 1
Eine Auswertung mit
for /f "tokens=3,8 delims= " %%a in (drucker.log) do (echo %%a;%%b>> Logdatei.txt)
Erstmal filtern wir nach einem User.
find "userA" drucker.log > userA
44 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 481437 1
46 VE.PDF UserA Canon iR C3200 PCL5c IP_172.22.44.71 93056 1
48 VEpdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 142196 1
50 VE_Ban.pdf UserA Canon iR C3200 PCL5c IP_172.22.44.71 139116 1
SED -e "s/^.*IP_172.22.44.71 /SET /p" -e "d" <userA > userA2
SED bekommt man ..... (nachreichen !!!!)
sieht die Ausgabe so aus:
SET 481437 1
SET 93056 1
SET 142196 1
SET 139116 1
Jetzt scheide ich die ersten beiden Spalten aus:
for /f "tokens=1,2,3 delims= " %%a in (userA2) DO (echo %%c >>userA3)
UserA3 Datei sieht so aus:
1
1
1
1
3) Addieren der Inhalte von UserA3 und mit einem Kontigent vergleichen.
Falls überschritten wird mit subinacl die Rechte am Drucker entzogen.
Dazu nutze ich varset (Auch Quelle angeben)
REM Kontingent festlegen
set kontigent=100
for /f %%a in (userA3) DO (set anzahl=%%a && call :inner)
goto :sa
:inner
call var set zahl="%anzahl%+%zahl%"
call var set ende="%zahl%-1"
call var set testa="%kontingent%-%ende%"
echo %user% %ende% %testa% >> statistik.txt
VARSET diff="%kontingent%-%ende%"
if errorlevel 1 subinacl /printer %printer% /deny=%dc%\%user%=F
4) Grobe Schleife:
Mit Hilfe der userlist.txt kann ich den gesamten Kram in eine große Schleife pummen.
for /f %%x in (userlist.txt) do (set user=%%x && call :sua)
:sua
....Mach was.....
REM Druckkontigent Version 0.1 Beta
REM Miguel
REM
del %outpfad%userlist.txt
set outpfad=d:scriptedruckerlog
REM Kontigent setzen
set kontingent=50
REM Variablen setzen fuer AD
set domainc=serverAC
set dc1=domäne
set dc2=de
set ou1=Berlin
set ou2=hinten
REm Variablen fuer Drucker setzen
set druckport=hpclj2500
REM Druckport muss unten manuell noch geändert werden.
set printer=\printerserverdebe-pr-canonirc3200
set server=\printerserver
REM Auslesen der Tage seit MOnatsbeginn
REM wird benötigt für Dumpel
REM Call GetAllDateTimeInfos /s
REM Auslesen der Benutzer in einer OU im AD
ldifde -f %outpfad%ExportUsers.ldf -s "%domainc%" -d "ou=%ou2%,ou=%ou1%,dc=%dc1%,dc=%dc2%" -p subtree -r "(objectClass=person)" -l "SamAccountName"
REM ENtfernen von unbrauchbaren EInträgen in der ldf
find "sAMAccountName:" %outpfad%ExportUsers.ldf > %outpfad%userlist.tmp
for /f "tokens=2 delims= " %%a in (%outpfad%userlist.tmp) do (echo %%a>> %outpfad%userlist.txt)
del %outpfad%ExportUsers.ldf
del %outpfad%userlist.tmp
REM Druckprotokoll auswerten
dumpel -f %outpfad%druck.log -m print -c -s \debe-as-01 -l system -e 10 -d 6 -format s
REM Ausnehmen vom Drucker
find "%druckport%" %outpfad%druck.log > %outpfad%\%druckport%
del %outpfad%druck.log
REM 1) Schritt aus dem Druckprotokoll werden die Informationen für jeden
REM unser in der userlist.txt getrennt
for /f %%x in (%outpfad%userlist.txt) do (set user=%%x && call :sua)
call :sa
:sua
find "%user%" %outpfad%\%druckport% > %outpfad% emp\%user%
SED -e "s/^.*hpclj2500 /SET /p" -e "d" <%outpfad% emp\%user% >%outpfad% emp2\%user%
del %outpfad% emp\%user%
for /f "tokens=1,2,3 delims= " %%a in (%outpfad% emp2\%user%) DO (echo %%c >>%outpfad% emp\%user%)
del %outpfad% emp2\%user%
REM Jetzt wird gerechnet
call var set zahl=0
call var set anzahl=0
call var set ende=0
for /f %%a in (%outpfad% emp\%user%) DO (set anzahl=%%a && call :inner)
goto :sa
:inner
call var set zahl="%anzahl%+%zahl%"
call var set ende="%zahl%-1"
call var set testa="%kontingent%-%ende%"
echo %user% %ende% %testa% >> %outpfad%statistik.txt
VARSET diff="%kontingent%-%ende%"
if errorlevel 1 subinacl /printer %printer% /deny=%dc%\%user%=F
del %outpfad% emp\%user%
:sa
Gruß Miguel
Softwarequellen:
Dumpel (Printlog ausgeben)
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/dum ...
SED
http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=5697
VAR SET
http://home.mnet-online.de/horst.muc/german.htm
Subinacl
http://www.microsoft.com/downloads/details.aspx?FamilyID=e8ba3e56-d8fe- ...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 25171
Url: https://administrator.de/contentid/25171
Ausgedruckt am: 25.11.2024 um 17:11 Uhr
1 Kommentar