Aktionen

ZnilTools:DisconnectNetworkPrinter.exe

Aus znilwiki

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




Programm starten

Aufruf für Programm

DisconnectNetworkPrinter.exe /ALL


Testmodus:

DisconnectNetworkPrinter.exe /TEST




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
+------------------------------------------------------------------------------




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)


Kommentare

Loading comments...