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, 6928 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.
02.
03.
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
Windows 10

Mit einer batch Datei etwas in eine andere batch Datei schreiben und ausführen

Frage von RaphaelStockWindows 105 Kommentare

Hey Administratoren!! Ich habe ein Problem: Ich möchte alle 40 sek etwas in eine batch Datei schreiben und ausführen ...

Batch & Shell

Batch Datei zum verschieben von Dateien aus Unterordnern ?

gelöst Frage von Ghostrider1911Batch & Shell10 Kommentare

Hallo, ich bräuchte eine Batch Datei die Dateien aus Unterordnern verschiebt. Also ich habe folgende Verzeichniss Struktur: Z:\Dateien\Ordner1\M1\ Z:\Dateien\Ordnärx\M1\ ...

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

Neueste Datei mit Batch suchen

gelöst Frage von thilo-55Batch & Shell4 Kommentare

Ein herzliches Hallo an die Teilnehmer des Forums. Leider komme ich mit meinen batch/dos-Kenntnissen nicht mehr weiter. Evtl. kann ...

Neue Wissensbeiträge
CMS
Erneut kritische Zero-Day-Lücke in Drupal
Tipp von Reini82 vor 14 MinutenCMS

Laut einem Bericht auf t3n gibt es eine Schwere Sicherheitslücke in Drupal die auch schon ausgenutzt wird. Betroffen sind ...

Sicherheit

MikroTik-Router patchen, Schwachstelle wird ausgenutzt

Information von kgborn vor 20 StundenSicherheit

Am 23. April 2018 wurde von Mikrotik ein Security Advisory herausgegeben, welches auf eine Schwachstelle im RouterOS hinwies. Mikrotik ...

Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 1 TagWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

iOS
Updates für Iphone und Co
Information von sabines vor 1 TagiOS

Gestern abend ist iOS 11.3.1 erschienen, ein kleineres Update, dass einige Lücken schließt und "Lahmlegen" nach einem Display Tausch ...

Heiß diskutierte Inhalte
Batch & Shell
Powershell: Im AD nach Rechnern mit bestimmten IP-Adressen suchen
gelöst Frage von Raven42Batch & Shell36 Kommentare

Hallo zusammen, ich suche nach einer Möglichkeit nach Computern im AD zu suchen , deren IP-Adresse mit 10.11.12. beginnt. ...

C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++34 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

Windows Server
Alten DC entfernen
Frage von smartinoWindows Server24 Kommentare

Hallo zusammen, ich habe hier eine Umgebung übernommen und erstmal einen DCDIAG gemacht. Dabei fällt auf, daß eine ganze ...

Ausbildung
Wie gelingt ein guter Einstieg in die FiSi-Ausbildung? (Umschulung)
Frage von SiAnKoAusbildung23 Kommentare

Schönen guten Tag, ich bin SiAnKo und habe seit dem 1.04.2018 eine Umschulung als FiSi angefangen. Ich möchte natürlich ...