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

Druckkontigentierung mittels Batch Dateien (Tutorialvorbereitung)

Mitglied: gogoflash

gogoflash (Level 2) - Jetzt verbinden

03.02.2006, aktualisiert 17.10.2012, 7067 Aufrufe, 1 Kommentar

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
https://www.administrator.de/wissen/druckkontingentierung-auf-windows-se ...


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:
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: userB
Interessieren tuen uns nur die samaccountName: einträge
01.
find "sAMAccountName:" ExportUsers.ldf > userlist.tmp
02.
REM Entfernen der sAMAccountName: Spalte
03.
for /f "tokens=2 delims= " %%a in (userlist.tmp) do (echo %%a>> userlist.txt)
Jetzt haben wir eine Liste (userlist.txt) die so aussieht.
01.
UserA
02.
UserB
Schritt 2) 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
-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:
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
In der dritten Spalte wird der Nutzer angegeben. In der letzten Spalte die gedruckten Seiten.

Eine Auswertung mit
01.
for /f "tokens=3,8 delims= " %%a in (drucker.log) do (echo %%a;%%b>> Logdatei.txt) 
bei den Einträgen von Microsoft aufgrund einer Zusätzlichen Spalte (Microsoft [Leerzeichen]Powerpoint) nur Müll aus.

Erstmal filtern wir nach einem User.
01.
find "userA" drucker.log > userA
Ausgabe 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	1
Mithilfe von sed (gleich kommt die Aufklärung)
01.
SED -e "s/^.*IP_172.22.44.71 /SET /p" -e "d" <userA > userA2
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:
01.
SET 481437	1	
02.
SET 93056	1	
03.
SET 142196	1	
04.
SET 139116	1
Jetzt scheide 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.
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)
01.
REM Kontingent festlegen
02.
set kontigent=100
03.
for /f %%a in (userA3) DO (set anzahl=%%a && call :inner)
04.
goto :sa
05.
:inner
06.
call var set zahl="%anzahl%+%zahl%"
07.
call var set ende="%zahl%-1"
08.
call var set testa="%kontingent%-%ende%"
09.
echo %user% %ende% %testa% >> statistik.txt
10.
VARSET diff="%kontingent%-%ende%"
11.
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.
01.
for /f %%x in (userlist.txt) do (set user=%%x && call :sua)
02.

03.
:sua
04.
....Mach was.....
5) Alles zusammen:
01.
REM Druckkontigent Version 0.1 Beta
02.
REM Miguel
03.
REM
04.

05.
del %outpfad%userlist.txt
06.
set outpfad=d:scriptedruckerlog
07.

08.
REM Kontigent setzen
09.
set kontingent=50
10.

11.
REM Variablen setzen fuer AD
12.
	set domainc=serverAC
13.
	set dc1=domäne
14.
	set dc2=de
15.
	set ou1=Berlin
16.
	set ou2=hinten
17.

18.
REm Variablen fuer Drucker setzen
19.
	set druckport=hpclj2500
20.
REM Druckport muss unten manuell noch geändert werden.
21.
	set printer=\printerserverdebe-pr-canonirc3200
22.
	set server=\printerserver
23.

24.

25.
REM Auslesen der Tage seit MOnatsbeginn
26.
REM wird benötigt für Dumpel
27.
REM Call GetAllDateTimeInfos /s
28.

29.
REM Auslesen der Benutzer in einer OU im AD
30.
ldifde -f %outpfad%ExportUsers.ldf -s "%domainc%" -d "ou=%ou2%,ou=%ou1%,dc=%dc1%,dc=%dc2%" -p subtree -r "(objectClass=person)" -l "SamAccountName"
31.

32.
REM ENtfernen von unbrauchbaren EInträgen in der ldf
33.
	find "sAMAccountName:" %outpfad%ExportUsers.ldf > %outpfad%userlist.tmp
34.
	for /f "tokens=2 delims= " %%a in (%outpfad%userlist.tmp) do (echo %%a>> %outpfad%userlist.txt)
35.
	del %outpfad%ExportUsers.ldf
36.
	del %outpfad%userlist.tmp
37.

38.

39.
REM Druckprotokoll auswerten
40.
dumpel -f %outpfad%druck.log -m print -c -s \debe-as-01 -l system -e 10 -d 6 -format s
41.

42.
REM Ausnehmen vom Drucker
43.
	find "%druckport%" %outpfad%druck.log > %outpfad%\%druckport%
44.
	del %outpfad%druck.log
45.

46.
REM 1) Schritt aus dem Druckprotokoll werden die Informationen für jeden
47.
REM unser in der userlist.txt getrennt
48.
for /f %%x in (%outpfad%userlist.txt) do (set user=%%x && call :sua)
49.
call :sa
50.
	:sua
51.
	find "%user%" %outpfad%\%druckport% > %outpfad%	emp\%user%
52.
	SED -e "s/^.*hpclj2500 /SET /p" -e "d" <%outpfad%	emp\%user% >%outpfad%	emp2\%user%
53.
	del %outpfad%	emp\%user%
54.
	for /f "tokens=1,2,3 delims= " %%a in (%outpfad%	emp2\%user%) DO (echo %%c >>%outpfad%	emp\%user%)
55.
	del %outpfad%	emp2\%user%
56.
	
57.
	REM Jetzt wird gerechnet
58.
	call var set zahl=0
59.
	call var set anzahl=0
60.
	call var set ende=0
61.
	for /f %%a in (%outpfad%	emp\%user%) DO (set anzahl=%%a && call :inner)
62.
		goto :sa
63.
		:inner
64.
		call var set zahl="%anzahl%+%zahl%"
65.
		call var set ende="%zahl%-1"
66.
		call var set testa="%kontingent%-%ende%"
67.
		echo %user% %ende% %testa% >> %outpfad%statistik.txt
68.
		VARSET diff="%kontingent%-%ende%"
69.
	        if errorlevel 1 subinacl /printer %printer% /deny=%dc%\%user%=F
70.
		del %outpfad%	emp\%user%
71.
: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- ...
Mitglied: gogoflash
05.02.2006 um 14:20 Uhr
Damit ich nicht die Übersicht verliere.

Was muß noch gemacht werden?


a) Der Code müsste optimiert werden. Vielleicht andere Batch Sprache.
Er ist nicht sonderlich schnell, und ich hab das Gefühl, dass die Schleifen zu oft durchgelaufen werden. Und die Technik mit zwei Temp Verzeichnissen ist auch nicht schick.

b) Für dumpel eine Tagesroutine, die die Tage seit Monatsbeginn ausgibt.

c) Kontingentierung nach Gruppenzugehörigkeit einbauen.

d) Benachrichtigung des Nutzers wenn Kontigent überschritten ist.

e) Abschaltroutine über Gruppenzugehörigkeit.

f) Reiner.... d.h. mehr Boardmittel ohne (var set usw)
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
BATCH ini Datei Datei auslesen
gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Batch & Shell
Batch Datei Ordnerüberwachung
Frage von Phant0xBatch & Shell1 Kommentar

Hallo zusammen, könntet ihr mir helfen eine Batch Datei zu schreiben, die einen bestimmten Ordner kontrolliert, ob sich Dateien ...

Batch & Shell
Batch-Datei erstellen
gelöst Frage von tocksickBatch & Shell2 Kommentare

Hallo liebe Gemeinde! Ich bin dabei eine Batch-Datei zu schreiben welche folgendes tun soll: Die Batch soll alle auf ...

Batch & Shell
Batch Datei Kopieren
gelöst Frage von FragerBatch & Shell17 Kommentare

Hallo Zusammen, ich bekomme es nicht hin ich muss aus einem Ordner (liegt auf einem Server) eine von vielen ...

Neue Wissensbeiträge
Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 18 StundenSicherheits-Tools5 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Off Topic
Sachen die die Welt nicht braucht - Platz 1
Tipp von brammer vor 3 TagenOff Topic14 Kommentare

Hallo, ich habs als Tipp angelegt als Erfahrungsbericht nein Danke brammer

Humor (lol)
Spirit of Health-Kongress in Berlin
Information von AnkhMorpork vor 3 TagenHumor (lol)5 Kommentare

tgif! Beim dritten Spirit of Health-Kongress trafen sich am Wochenende Alternativmediziner und Naturheilkundler im Maritim Hotel Berlin, um sich ...

Windows 7

Updates zum Nachrüsten des SHA-2-Support für Windows 7 SP1, Windows Server 2008 (R2) und WSUS 3.0 SP2 sind da

Information von kgborn vor 5 TagenWindows 7

Wie bereits früher angekündigt (Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019) hat Microsoft die ...

Heiß diskutierte Inhalte
Cloud-Dienste
Remotedesktopverbindungen beeinflussen sich gegenseitig
gelöst Frage von Samy89Cloud-Dienste15 Kommentare

Moin, ich habe mehrere RDPs gleichzeitig laufen, auf denen jeweils ein Script via Powershell läuft. In diesem Prozess benutzt ...

Netzwerkgrundlagen
Reicht 10GBit Uplink Port für Stacking für ein 10GBit Switch?
gelöst Frage von walnickNetzwerkgrundlagen12 Kommentare

Hallo, Ich habe eine frage. Ich überlege gerade 2 neue Switche von CiscoSG350XG-24F  zu kaufen und die als Core ...

LAN, WAN, Wireless
Switch als Verbindung von 2 Netzwerken
gelöst Frage von Lutz-ReLAN, WAN, Wireless12 Kommentare

Guten Tag Ich hab folgendes Problem 2 Rechner und 2 IP Kameras sind ohne dhcp in einen IP4 Netzwerk ...

DNS
Größere DNS Probleme nach zweitem DC. Eigentlich sollte es auch dadurch besser werden
Frage von TeWutzDNS12 Kommentare

Hallo zusammen, nachdem ich letzte Woche erfolgreich einen zweiten DC ) an den Start gebracht habe melden sich weiterhin ...