Feed
Google+
Contact
XING
LinkedIn
Twitter
ICQ
meebo.com

Drucker via AD automatisch installieren - das Script

by Roland Schumacher alias GENiALi 4. Juni 2007 -- 134 words  -- 180 mal gelesen

Wie versprochen, hier noch das Script.
Aber aufgepasst. WSH ist nicht meine Sprache. Es läuft, es macht
Logdateien und bei mir funktioniert es. Ich habe aber nur Windows XP im Einsatz.

Also auf eigene Gefahr. :-)

Wer Verbesserungsvorschläge hat, her damit. :-)

' Name: ConnectToPrinter.vbs
' Author: Roland Schumacher Alias GENiALi - http://blog.geniali.ch/
' Version: 1.0
' Description: Script das anhand des Feldes "Info" im AD die entsprechenden Drucker installiet.
' So kann man Zentral alle Drucker installieren lassen und auf "Kundenweinfach eingehen.
' Datum: 30.05.2007

Option Explicit
' Const
Const ForAppending = 8
Const LOGFOLDER = "\\Server\V\Support\Logs\Druckerinstallation\"
' EndConst

' Ein paar Variablen definieren
Dim networkuseruserDnadsInfosPcName
Dim oUserprinterInfolinelinesprinterInfos

' Fehlerhandling einschalten
On Error Resume Next

' Eine aktuelle Instanz des Netzwerkobjects holen
Set network = CreateObject("WScript.Network")

' Benutzername und PC Name ermitteln.
user = network.UserName
sPcName = network.ComputerName

'Fehlerhandling mit LogFile Eintrag
If Err.number <> 0 Then
     
WriteLogError("Fehler beim auslesen der Userinfos wie Username und PC name: " _
     Err.number)
     
WriteLogError(Err.Source)
     
WriteLogError(Err.Description)
     
Err.Clear
End If

' LDAP Pfad fden akteullen User ermitteln/erstllen
Set adsInfo = CreateObject("ADSystemInfo")
userDn = "LDAP://" & adsInfo.UserName

' Das Userobject aus dem AD auslesen und auf das Feld Info zugreiffen
Set oUser = GetObject(userDn)
printerInfo = oUser.info

'Fehlerhandling mit LogFile Eintrag
If Err.number <> 0 Then
     
WriteLogError("Fehler beim auslesen der Infos aus dem AD: " _
     & userDn & "   ---   " & Err.number)
     
WriteLogError(Err.Source)
     
WriteLogError(Err.Description)
     
Err.Clear
End If

' Array erstellen wo alle Drucker rein kommen. 50 sollten reichen. :-)
lines = Array(50)
lines = Split(printerInfoVbCrLf)

'Fehlerhandling mit LogFile Eintrag
If Err.number <> 0 Then
     
WriteLogError("Fehler beim auftrennen der Druckerdefinitionsliste: " _
    & printerInfo & "   ---   " & Err.number)
     
WriteLogError(Err.Source)
     
WriteLogError(Err.Description)
     
Err.Clear
End If

'Alle Netzwerkdrucker löschen
If UBound(lines) > 0 Then
     
     
DelAllPrinter
     
     
' Alle definierten Drucker aus dem Feld Info durchlaufen
     For Each line In lines
          
'Die Definition zerlegen.
          printerInfos = Split(line";")
          
          
'Fehlerhandling mit LogFile Eintrag
          If Err.number <> 0 Then
               
WriteLogError("Fehler beim auftrennen der Druckerdefinition in die einzelnen Felder: " _
               & line & "   ---   " & Err.number)
               
WriteLogError(Err.Source)
               
WriteLogError(Err.Description)
               
Err.Clear
          
End If
     
          
' Wenn eine Druckerdefinition ein ++ hat ist es der Standartdrucker
          If printerInfos(0) = "++" Then
               
SetPrinter printerInfos(2), printerInfos(1), vbTrue
          
End If
          
' Wenn nur ein + ist wird der Drucker einfach mitinstalliert.
          If printerInfos(0) = "+" Then
               
SetPrinter printerInfos(2), printerInfos(1), vbFalse
          
End If
     
Next
Else
     
WriteLogInfo("Es wurden keine Drucker zum installieren gefunden")
End If

' Installiert den Drucker
' PrintServer = Name der Servers
' PrinterName = Freigabename des Druckers
' Default = ist True wenn es der Standartdrucker ist
Sub SetPrinter(PrintServerPrinterNameDefault)
          
' Fehlerhandling einschalten
          On Error Resume Next
          
' Drucker installieren.
          network.AddWindowsPrinterConnection "\\" & PrintServer     & "\" & PrinterName
          
WriteLogInfo("\\" & PrintServer     & "\" & PrinterName & " wurde installiert.")
          
' Als Standart setzen wenn Default True ist.
          If Default = vbTrue Then
               
network.SetDefaultPrinter "\\" & PrintServer & "\" & PrinterName
          
End If
          
' Fehlerhandling
          If Err.number <> 0 Then
               
WriteLogError("Fehler beim verbinden des Druckers: " _
               & "\\" & PrintServer & "\" & PrinterName & "   ---   " & Err.number)
               
WriteLogError(Err.Source)
               
WriteLogError(Err.Description)
               
Err.Clear
          
End If
End Sub

' Löscht alle Drucker die Netzwerkdrcker sind.
Sub DelAllPrinter
     
' Fehlerhandling einschalten
     On Error Resume Next
     
' Ein paar Variabeln deklarieren
     Dim wmilocalPrinterslocalPrinter
     
' Via WMI alle Drucker suchen die lokal installiert sind.
     Set wmi = GetObject("winmgmts:\\.\root\CIMV2")
     Set localPrinters = wmi.InstancesOf("Win32_Printer"48)
     
' alle gefundenen Drucker durchlaufen ...
     For Each localPrinter In localPrinters
          
' ... und prüfen ob es ein Netzwerkdrucker ist. 
          If localPrinter.Network = vbTrue Then
               
'  Wenn ja, dann wird er gelöscht
               WriteLogInfo(localPrinter.Name & " wurde gelöscht")
               
localPrinter.Delete_
               
' Fehlerhandling
               If Err.number <> 0 Then
                    
WriteLogError("Fehler beim löschen des Druckers: " _
                    & localPrinter.Name & "  ---  "  & Err.number)
                    
WriteLogError(Err.Source)
                    
WriteLogError(Err.Description)
                    
Err.Clear
               
End If
          
End If
     
Next
End Sub

' Schreibt eine Logdatei weg.
Sub WriteLogInfo(Meldung)
     
Dim logFilefsstreamtext
     
logFile = LOGFOLDER & user & "." & sPcName & ".info.log"
     
     
Set fs = CreateObject("Scripting.FileSystemObject")
     
Set stream = fs.OpenTextFile(logFileForAppendingvbTrue)
     
     
text = Now() & " - " & user & " - " & Meldung
     
     
stream.WriteLine(text)
     
     
stream.Close     
End Sub

' Schreibt eine Logdatei weg.
Sub WriteLogError(Meldung)
     
Dim logFilefsstreamtext
     
logFile = LOGFOLDER & user & "." & sPcName & ".error.log"
     
     
Set fs = CreateObject("Scripting.FileSystemObject")
     
Set stream = fs.OpenTextFile(logFileForAppendingvbTrue)
     
     
text = Now() & " - " & user & " - " & Meldung
     
     
stream.WriteLine(text)
     
     
stream.Close     
End Sub

Jetzt fehlt nur noch der Hinweis wie man das Script starten kann.

Mir sind zwei Möglichkeiten bekannt.

1. Via GPO
Das sieht dann so aus. Ich gehe mal davon aus, dass der Umgang mit dem
GPO Editor klar ist.

image

2. Via Loginscript
Man fügt folgende Zeile im Loginscipt ein.
cscript.exe %0\..\ConnectToPrinter.vbs //B //T:120
//B -> Batchmodus, zeigt keine Fehlermeldungen an.
//T:120 -> Timeout für das Scirpt. Hat hier im Maximum 120 Sekunden zeit sein Job zu machen.

Tags: , , ,

Allerlei

Kommentar schreiben

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading

Statistik

Gesamte Posts: 1025
Dieses Jahr: 7
Diesen Monat: 1
Diese Woche: 0
Kommentare: 929
Total Bewertungen: 91
Ø Bewertung: 4,42
Meisten Kommentare
Google+ ... (28)
Beste Ø Bewertung
Tastaturlayout von Visual Stud ... (5)
Meiste Bewertungen
Windows 7 und die ersten Erfah ... (5)

Buttons

Stop Spam Harvesters, Join Project Honey Pot Benutzerprofil von GENiALi connection speed test network connection Bloggeramt.de Slug.ch Blog Verzeichnis und Blog Webkatalog Schumacher Roland Seitwert Valid XHTML 1.0 Transitional

writing