[How-To] Printer/Drucker

Xaero1982

Well-Known Member
#1
Aloha, ich dachte mir da ich nun schon so viel Zeit in mein Vorhaben investiert habe werde ich mal das ein oder andere für die Nachwelt posten.

Basis ist WMI und VBScript:
Systemvorraussetzungen: WSH 5.6 und WMI (Windows 2000/ME/XP standard - bei NT und Windows 9x installierbar)
Ich sage es von vornherein:

Ich bin kein Programmierer und daher ist sicher vieles Verbesserungsfähig.

Die folgenden drei Skripts dienen dazu auf einem PC, dem per Gruppenrichtlinie das Kontextmenü "Drucker" genommen wurde, einen Drucker:
  • zu installieren
  • zu löschen
  • als Standard einzurichten

Code:
'**********************
'* Coded by Xaero1982 *
'* v. 1.0             *
'**********************
'Script zum hinzufügen eines Druckers auf dem lokalen Rechner
'Über Remote nicht möglich!!

on error resume next

do
	strUser = InputBox ("Please enter the user name: ")
loop until strUser <> "" OR strUser = false

do
	strPassword = InputBox ("Please enter the Passwort: ")
loop until strPassword <> "" OR strPassword = false

do
	strComputer = InputBox ("Please enter the Printservername: ","Printservername","Printsrv")

    Set objShell = CreateObject("WScript.Shell")
    strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & "" 'Ping ausführen
    Set objExecObject = objShell.Exec(strCommand)
	'=======================================================
    Do While Not objExecObject.StdOut.AtEndOfStream
        strText = objExecObject.StdOut.ReadAll()
            If Instr(strText, "Anforderung") > 0 Then
               objshell.popup "Host " & strComputer & " nicht erreichbar!",3
            elseif Instr(strText, "Unbekannter Host " & strComputer & ".") <> 0  then
               objshell.popup "Host " & strComputer & " nicht erreichbar!",3
            end if
    loop
loop until strComputer <> "" OR Instr(strText, "Unbekannter Host " & strComputer & ".")<>0 OR Instr(strText, "Anforderung") > 0 OR strComputer = false


Const WbemAuthenticationLevelPktPrivacy = 6
strNamespace = "\root\cimv2"
'=======================================================

'Verbindung zum WMI Namespace herstellen================
    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
    objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'=======================================================

	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer")

	For Each objItem In colItems
        Message = Message & objItem.Caption & "  -  "
        Message = Message & objItem.Location & vbcrlf
    Next

strCounter = InputBox("Please enter how many Printers do you want to add !")

for x = 1 to strCounter
	strPrinter = InputBox("Please enter the Printername: " & vbcrlf & vbcrlf & Message, AddPrinter)
Next

Set WshNetwork = CreateObject("WScript.Network")
'msgbox ("\\" & strComputer & "\" & strPrinter & "")
WshNetwork.AddWindowsPrinterConnection "\\" & strComputer & "\" & strPrinter & ""
Erklärung:
Die ersten 2 Inputs dienen dazu die Rechte für den Printserver einzugeben, sprich Adminstrator und AdministratorPW.
Dann wird abgefragt wie viele Drucker man installieren will um das Script nicht immer neu zu starten.

2. Löschen eines Druckers:

Code:
'**********************
'* Coded by Xaero1982 *
'* v. 1.0             *
'**********************
'Löscht einen Drucker
on error resume next

strComputer = "."
'=======================================================
	Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer")

	For Each objItem In colItems
        Message = Message & objItem.Caption & vbcrlf
    Next

strPrinter = InputBox("Please enter the Printername: " & vbcrlf & vbcrlf & Message)

Set objNetwork = CreateObject("WScript.Network")
objNetwork.RemovePrinterConnection strPrinter
Erklärung: Es werden alle lokalen Drucker aufgelistet. Der zu löschende Drucker muss exakt eingegeben werden.

3. Drucker als Standard einrichten:

Code:
'**********************
'* Coded by Xaero1982 *
'* v. 1.0             *
'**********************
'Legt den Defaultdrucker fest
on error resume next

strComputer = "."
'=======================================================
	Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer")

	For Each objItem In colItems
        Message = Message & objItem.Caption & vbcrlf
    Next

strPrinter = InputBox("Please enter the Default-Printername: " & vbcrlf & vbcrlf & Message)

Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.SetDefaultPrinter "" & strPrinter & ""
Erklärung:
Listet alle lokalen Drucker auf. Den als standard zu definierenden Drucker exakt eingeben.

Und wie immer:

Bei Fragen einfach fragen.

Wer Verbesserungsvorschläge hat bitte melden :)

so far
Xaero
 
Zuletzt bearbeitet:
Oben