Aktionen

ZnilTools:DisconnectNetworkPrinter.exe

Aus znilwiki

1 DisconnectNetworkPrinter.exe



Download: DisconnectNetworkPrinter.zip



Beschreibung:
Löscht alle verbunden Netzwerkdrucker. Netzwerkdrucker sind in diesem Fall alle Drucker die über einen Printserver bzw. eine Freigabe verbunden sind,
also Drucker nach dem Schema

\\server\druckername




2 Programm starten

Aufruf für Programm

DisconnectNetworkPrinter.exe /ALL


Testmodus:

DisconnectNetworkPrinter.exe /TEST




3 Eingebaute Hilfe

Mit

DisconnectNetworkPrinter.exe /?

oder ohne Parameter wird die Hilfe ausgegeben

+------------------------------------------------------------------------------
| DisconnectNetworkPrinter.exe - Version 1.0.0.1
+------------------------------------------------------------------------------
| 2014 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net
+------------------------------------------------------------------------------

Ermittelt alle vorhandenen Netzwerkdrucker und trennt diese.
Als Netzwerkdrucker zählen nur Drucker die über einen Printserver
verbunden sind, also nach dem Schema \\Server\Druckername
Lokal verbundene Drucker - das sind auch Netzwerkdrucker die direkt
über Ihre IP angebunden sind - werden NICHT getrennt
------------------------------------------------------------------------------- 

Aufruf für Programm
DisconnectNetworkPrinter.exe [Option] [Parameter]


Mögliche Optionen sind:
-----------------------
/ALL                      : Alle vorhandenen Netzwerkdrucker werden getrennt 

/TEST                     : Netzwerkdrucker werden nur aufgelistet, nicht getrennt

+------------------------------------------------------------------------------
| DisconnectNetworkPrinter.exe ist FREEWARE! Kopieren, weitergeben ausdrücklich erlaubt!
| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:
| http://znil.net/index.php?title=ZnilTools:DisconnectNetworkPrinter.exe
+------------------------------------------------------------------------------




4 Quellcode

Nicht meckern, hab ich mal eben in ein paar Minuten zusammengeschustert und dabei Code aus anderen Programmen recycelt sowie den ScriptOmatic genutzt:

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Icon256-32.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Description=Bernhard@znil.de
#AutoIt3Wrapper_Res_Fileversion=1.0.0.5
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_SaveSource=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt('MustDeclareVars', 1)


Dim $wbemFlagReturnImmediately = 0x10
Dim $wbemFlagForwardOnly = 0x20
Dim $colItems = ""
Dim $strComputer = "localhost"

Dim $Output
Dim $objWMIService
Dim $colItems
Dim $objNetwork

Global $oMyError
Global $g_eventerror = 0
Global $COM_Fehlermeldung = ""

;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $Header = "+------------------------------------------------------------------------------" & @CRLF & _
		"| DisconnectNetworkPrinter.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _
		"+------------------------------------------------------------------------------" & @CRLF & _
		"| 2014 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _
		"+------------------------------------------------------------------------------" & @CRLF & _
		@CRLF

;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $HilfeText = "Ermittelt alle vorhandenen Netzwerkdrucker und trennt diese." & @CRLF & _
				 "Als Netzwerkdrucker zählen nur Drucker die über einen Printserver" & @CRLF & _
				 "verbunden sind, also nach dem Schema \\Server\Druckername" & @CRLF & _
				 "Lokal verbundene Drucker - das sind auch Netzwerkdrucker die direkt" & @CRLF & _
				 "über Ihre IP angebunden sind - werden NICHT getrennt" & @CRLF & _
				"-------------------------------------------------------------------------------" & @CRLF & _
				@CRLF & _
				"Aufruf für Programm" & @CRLF & _
				@ScriptName & " [Option] [Parameter]" & @CRLF & _
				@CRLF & _
				@CRLF & _
				"Mögliche Optionen sind:" & @CRLF & _
				"-----------------------" & @CRLF & _
				"/ALL                      : Alle vorhandenen Netzwerkdrucker werden getrennt" & @CRLF & _
				@CRLF & _
				"/TEST                     : Netzwerkdrucker werden nur aufgelistet, nicht getrennt" & @CRLF & _
				@CRLF & _
				"+------------------------------------------------------------------------------" & @CRLF & _
				"| DisconnectNetworkPrinter.exe ist FREEWARE! Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _
				"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _
				"| http://znil.net/index.php?title=ZnilTools:DisconnectNetworkPrinter.exe" & @CRLF & _
				"+------------------------------------------------------------------------------" & @CRLF



; ###################################################################################
; Diese Funktion ist für den Fall das es Fehler bei den Objekten gibt
; Das würde normalerweise eine AutoIt Fehler-PopUp Box erzeugen welche ich vermeiden wollte
Func MyErrFunc()
	Local $err = $oMyError.number
	If $err = 0 Then $err = -1

	$g_eventerror = $err ; Zum Abfragen, nachdem die Funktion beendet ist
	$COM_Fehlermeldung = $oMyError.windescription
EndFunc   ;==>MyErrFunc

; ###################################################################################
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt
; Wir zudem für die Prüfung der Gruppenzugehörigkeit benötigt für Gruppen mit Umlauten, z.B. Domänen-Admins
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM

Func _ANSI2OEM($text)
	$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
	Return $text[2]
	;Return $text
EndFunc   ;==>_ANSI2OEM

; ###################################################################################
; Hilfsroutine die den Hilfetext ausgibt
Func _HilfeAusgeben()
	ConsoleWrite(_ANSI2OEM($Header))
	ConsoleWrite(_ANSI2OEM($HilfeText))
EndFunc   ;==>_HilfeAusgeben

; ###################################################################################
; H I L F E
; ###################################################################################

;testen ob wir überhaupt mit einem Parameter gestartet wurden - sonst Hilfe ausgeben
If $CmdLine[0] = 0 Then
	_HilfeAusgeben()
	Exit
EndIf

;testen ob der Parameter 1 ist auf "/?" testen und ebenfalls Hilfe ausgeben
If $CmdLine[1] = "/?" Then
	_HilfeAusgeben()
	Exit
EndIf


If $CmdLine[1] = "/TEST" Then
	$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ; COM-Fehlerbehandlung initialisieren
	$Output = $Output & "Computer: " & $strComputer  & @CRLF
	$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
	$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
	If IsObj($colItems) then
		For $objItem In $colItems
			If $objItem.Network = True Then
				ConsoleWrite(_ANSI2OEM($objItem.Name & ' ist ein Netzwerkdrucker') & @CRLF)
			EndIf
		Next
	Endif
Exit 0
EndIf


If $CmdLine[1] = "/ALL" Then
	$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ; COM-Fehlerbehandlung initialisieren
	$Output = $Output & "Computer: " & $strComputer  & @CRLF
	$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
	$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
	$objNetwork = ObjCreate("WScript.Network")
	If IsObj($colItems) then
		For $objItem In $colItems
			If $objItem.Network = True Then
				ConsoleWrite(_ANSI2OEM($objItem.Name & " wird getrennt ...") & @CRLF)
				$objNetwork.RemovePrinterConnection($objItem.Name)
			EndIf
		Next
	Endif
Exit 0
EndIf

Exit 0




--Bernhard Linz 14:23, 23. Okt. 2014 (CEST)


5 Kommentare


Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen. Bei einem Kommentar wird deine IP-Adresse zusammen mit dem Text, den angegebenen Namen bzw. der Email-Adresse in der Datenbank für die Kommentare dauerhaft gespeichert. Genaueres kannst du hier nachlesen: Datenschutzerklärung