Problem mit VBS Login Druckerverbindung
Hallo zusammen,
wir sind in der Firma gerade dabei ein neues Loginscrip in VBS zu schreiben. Soweit läuft auch alles nur 2 Scripte nicht. Wir wollen das beim Login alle Drucker getrennt und danach neu verbunden werden. Wenn wir die einzelnen VBS Scripte nun einzeln abspeichern dann laufen diese auch allerding nicht wenn wir alles in ein Script packen. Nur die Drucker Scripte laufen nicht wenn wir alles in ein großes Script packen! Könnt ihr und einen Tipp geben?
wir sind in der Firma gerade dabei ein neues Loginscrip in VBS zu schreiben. Soweit läuft auch alles nur 2 Scripte nicht. Wir wollen das beim Login alle Drucker getrennt und danach neu verbunden werden. Wenn wir die einzelnen VBS Scripte nun einzeln abspeichern dann laufen diese auch allerding nicht wenn wir alles in ein Script packen. Nur die Drucker Scripte laufen nicht wenn wir alles in ein großes Script packen! Könnt ihr und einen Tipp geben?
' * Description: This script configures the standard settings for domain computers
' *
' ********************************************
On Error Resume Next
' *** Initialze objects ***
Set WSHNetwork = WScript.CreateObject("WScript.Network")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WSHFso = WScript.CreateObject("Scripting.FileSystemObject")
Set MSIE = WScript.CreateObject("InternetExplorer.Application")
Set MailMSIE = WScript.CreateObject("InternetExplorer.Application")
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set fs = CreateObject("Scripting.filesystemobject")
Set net = CreateObject("WScript.Network")
' *** Get environment information ***
OS = WSHShell.ExpandEnvironmentStrings("%OS%")
WINDIR = WSHShell.ExpandEnvironmentStrings("%WINDIR%")
PROGRAMDIR = WSHShell.ExpandEnvironmentStrings("%ProgramFiles%")
USERPROFILE = WSHShell.ExpandEnvironmentStrings("%USERPROFILE%")
GatewayIP = ""
WSHVer = WScript.Version
WORKSTATION = WSHNetwork.ComputerName
USERDOMAIN = WSHNetwork.UserDomain
USERDNSDOMAIN = WSHShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%")
LOGONSERVER = LCase(WSHShell.ExpandEnvironmentStrings("%LOGONSERVER%") & "." & USERDNSDOMAIN)
LOGONSERVER_NFQDNS = LCase(WSHShell.ExpandEnvironmentStrings("%LOGONSERVER%")) '*** NOT Ffull qualified DNS (=WINS-Notation "\\Servername") ***
NETLOGON_DIR = WSHShell.ExpandEnvironmentStrings("%LOGONSERVER%") + "\NETLOGON\"
While USERNAME = ""
USERNAME = WSHNetwork.UserName ' Wird solange ausgeführt, bis der User ermittelt ist.
Wend
' *** IE-Ausgabe vorbereiten ***
SetupMSIE() ' IE einstellen für das Anzeige Fenster.
'*** Ausgabe Logo
MSIE.Document.Write "<HTML><TITLE>" & USERDOMAIN & " Domain-Initialisierung für Benutzer " & UCase(USERNAME) & "</TITLE>" &_
"<BODY bgcolor=#ffffff>" &_
"<FONT FACE=ARIAL size='-1'>" &_
"<table><tr><td align='left'><IMG SRC='" & NETLOGON_DIR & "images\logos\logo.bmp' WIDTH='50%'></td></tr></table><BR>" &_
"<HR>"
' *** Ausgabe Willkommensmeldung
Welcome()
' *** Synchronisation der Systemzeit ***
TimeSync()
' *** Laufwerke verbinden***
MSIE.Document.Write "<BR>- Verbinden der Netzlaufwerke"
fs = CreateObject("Scripting.filesystemobject")
net = CreateObject("WScript.Network")
' *** Löschen der Druckerverbindungen ***
MSIE.Document.Write "<BR>- Trennen der Drucker"
WSHNetwork = WScript.CreateObject
WshNetwork.RemovePrinterConnection
' *** Herstellen der Druckerverbindungen ***
MSIE.Document.Write "<BR>- Verbinden der Drucker"
WSHNetwork = WScript.CreateObject
WshNetwork.AddWindowsPrinterConnection
' *** Standard-Drucker definieren
MSIE.Document.Write "<BR>- Definition des Standard-Druckers "
WSHNetwork = WScript.CreateObject
WSHNetwork.SetDefaultPrinter(DefaultPrinter)
' *** Fehlerbehandlung ***
MSIE.Document.Write "<HR>"
If NErr = 0 Then
' *** Keine Fehler aufgetreten ***
MSIE.Document.Write "Die Domain-Initialsierung für " & USERNAME & " wurde erfolgreich abgeschlossen."
Else
MSIE.Document.Write "<script language='javascript'>alert('Während der Domain-Initialisierung sind Fehler aufgetretten. Bitte informieren Sie Ihren Administrator.');</script>"
MailBetreff = "Admin-Alert Fehler"
MailText = "Fehler: " & NErr
SendMail AdminMailAccount,MailBetreff,MailText
End If
MSIE.Document.Write "</p></FONT></BODY></HTML>"
WScript.Sleep(10000) ' *** Warten, damit Ausgabe gelesen werden kann ***
MSIE.Quit ' *** Fenster zu! ***
WScript.Quit ' *** Ende des Domain-Initialisierungs-Scripts ***
' **************************************************************************
' *************************** Functions and Subs ***************************
' **************************************************************************
' **********************************************
' * Funktion: Sub Welcome
' * Beschreibung: Gibt die Willkommensmeldung aus.
' * Parameter: <keine>
' * Rückgabe: <keine>
' **********************************************
Sub Welcome()
On Error Resume Next
MSIE.Document.Write "<B>Guten "
If Hour(Now) < 12 Then
MSIE.Document.Write "Morgen"
ElseIf Hour(Now) < 17 Then
MSIE.Document.Write "Tag"
Else
MSIE.Document.Write "Abend"
End If
MSIE.Document.Write " " & UCase(USERNAME) & " und willkommen in " & UCase(USERDOMAIN) & "!</B>"
MSIE.Document.Write "<p>Ihr Logon-Server ist " & UCase(LOGONSERVER) & ".</p>"
If Err.Number <> 0 Then
Err.Clear
End If
End Sub
' **********************************************
' * Funktion: Sub SetupMSIE
' * Beschreibung: Bereitet das Internet-Explorer-Fenster für die
' * Ausgabe während der Ausführung des Login-Scripts vor
' * Parameter: <keine>
' * Rückgabe: <keine>
' **********************************************
Sub SetupMSIE()
On Error Resume Next
MSIE.Navigate "About:Blank"
MSIE.ToolBar = False
MSIE.StatusBar = False
MSIE.Resizable = False
MSIE.Center = True
Do
Loop While MSIE.Busy
SWidth = MSIE.Document.ParentWindow.Screen.AvailWidth
SHeight = MSIE.Document.ParentWindow.Screen.AvailHeight
MSIE.Width = SWidth * 0.5
MSIE.Height = SHeight * 0.8
MSIE.Left = (SWidth - MSIE.Width)/2
MSIE.Top = (SHeight - MSIE.Height)/2
MSIE.Visible = True
If Err.Number <> 0 Then
Err.Clear
End If
End Sub
' **********************************************
' * Funktion: Remove Printer
' * Beschreibung: Entfernt alle Drucker
' * Rückgabe: <keine>
' **********************************************
Set WSHNetwork = WScript.CreateObject("WScript.Network")
On Error Resume Next
PrinterPath = "\\192.168.0.21\RICOH2018D"
WshNetwork.RemovePrinterConnection PrinterPath, true, true
PrinterPath = "\\192.168.0.21\HP1320NOG1l"
WshNetwork.RemovePrinterConnection PrinterPath, true, true
PrinterPath = "\\192.168.0.21\HP1320NOG2r"
WshNetwork.RemovePrinterConnection PrinterPath, true, true
PrinterPath = "\\192.168.0.21\hp2800"
WshNetwork.RemovePrinterConnection PrinterPath, true, true
If Err.Number <> 0 Then
Err.Clear
End If
' **********************************************
' * Funktion: Map Printer
' * Beschreibung: Mapped Alle Drucker und definiert Standard
' * Rückgabe: <keine>
' **********************************************
Set WSHNetwork = WScript.CreateObject("WScript.Network")
On Error Resume Next
WshNetwork.AddWindowsPrinterConnection "\\192.168.0.21\RICOH2018D"
WshNetwork.AddWindowsPrinterConnection "\\192.168.0.21\HP1320NOG1l"
WshNetwork.AddWindowsPrinterConnection "\\192.168.0.21\HP1320NOG2r"
WshNetwork.AddWindowsPrinterConnection "\\192.168.0.21\hp2800"
WSHNetwork.SetDefaultPrinter "\\192.168.0.21\RICOH2018D"
If Err.Number <> 0 Then
Err.Clear
End If
' **********************************************
' * Funktion: Sub MapDrive
' * Beschreibung: Mapped Netzlaufwerke
' * Rückgabe: <keine>
' **********************************************
Set fs = CreateObject("Scripting.filesystemobject")
Set net = CreateObject("WScript.Network")
On Error Resume Next
If fs.driveExists("X:\") Then net.RemoveNetworkDrive "X:",True,True
net.MapNetworkDrive "X:", "\\192.168.0.24\mxcshare"
' **********************************************
' * Funktion: Sub TimeSync
' * Beschreibung: Synchronisiert die Systemzeit mit dem Timeserver
' * Parameter: <keine>
' * Rückgabe: <keine>
' **********************************************
Sub TimeSync()
'On Error Resume Next
MSIE.Document.Write "<p>Synchronisation der Systemzeit</p>"
WSHShell.Run "w32tm.exe /resync", 0
End Sub
Please also mark the comments that contributed to the solution of the article
Content-Key: 68069
Url: https://administrator.de/contentid/68069
Printed on: April 24, 2024 at 21:04 o'clock
12 Comments
Latest comment
Hallo Hunduster!
Das Problem sind die jeweiligen Zeilen
Eigentlich wird ja in * Initialze objects * schon das "WSHNetwork"-Objekt erzeugt - also die fraglichen Zeilen einfach entfernen und dieses Objekt verwenden (übrigens kann auch für das Mappen der Laufwerke das "net"-Objekt durch das "WSHNetwork"-Objekt ersetzt werden).
Und wenn Du schon beim Aufräumen bist, könntest Du ein einziges "FileSystemObject" (egal ob "WSHFso" oder "FileSystem" oder "fs") durchgängig im gesamten Script verwenden und auch noch die überflüssige Zeile
einstampfen ...
Grüße
bastla
Das Problem sind die jeweiligen Zeilen
WSHNetwork = WScript.CreateObject
Und wenn Du schon beim Aufräumen bist, könntest Du ein einziges "FileSystemObject" (egal ob "WSHFso" oder "FileSystem" oder "fs") durchgängig im gesamten Script verwenden und auch noch die überflüssige Zeile
Set MailMSIE = WScript.CreateObject("InternetExplorer.Application")
Grüße
bastla
Hallo Hunduster!
Wenn in den Zeilen
Dein Script nicht nur behauptete, dass das Eine oder Andere gerade durchgeführt würde, sondern die entsprechenden Aktionen durch Deklaration und Aufruf des jeweiligen Subs (etwa am Beispiel des Verbindens der Netzlaufwerke:
tatsächlich erfolgten, könnte es vielleicht klappen (allerdings habe ich nur oberflächlich über den Code geschaut).
(Die diversen "FileSystemObject"-Zuweisungen sind übrigens immer noch vorhanden, was allerdings ebensowenig ursächlich für Dein Problem sein sollte wie die beiden "WScript.Network"-Objekte "WSHNetwork" und "net".)
Grüße
bastla
Wenn in den Zeilen
' * Laufwerke verbinden*
MSIE.Document.Write "<BR>- Verbinden der Netzlaufwerke"
' * Löschen der Druckerverbindungen *
MSIE.Document.Write "<BR>- Trennen der Drucker"
' * Herstellen der Druckerverbindungen *
MSIE.Document.Write "<BR>- Verbinden der Drucker"
' * Laufwerke verbinden*
MSIE.Document.Write "<BR>- Verbinden der Netzlaufwerke"
MapNWDrives
...
...
Sub MapNWDrives()
' * Funktion: Sub MapDrive
' * Beschreibung: Mapped Netzlaufwerke
' * Rückgabe: <keine>
'
On Error Resume Next
If fs.driveExists("X:\") Then net.RemoveNetworkDrive "X:",True,True
net.MapNetworkDrive "X:", "\\192.168.0.24\mxcshare"
End Sub
(Die diversen "FileSystemObject"-Zuweisungen sind übrigens immer noch vorhanden, was allerdings ebensowenig ursächlich für Dein Problem sein sollte wie die beiden "WScript.Network"-Objekte "WSHNetwork" und "net".)
Grüße
bastla
Hallo Hunduster!
Ähnlich: http://support.microsoft.com/kb/197959/de
Grüße
bastla
Ist sowas überhaupt realisierbar in VBS???
In reinem VBS nicht, aber da Ihr ja ohnehin schon DHTML verwendet, müsste sich eigentlich das folgende Beispiel (hier geklaut) integrieren lassen:sStockwerk = SelectBox("Bitte Stockwerk wählen", Array("E", "1.", "2.", "3."))
WScript.Echo sStockwerk
Function SelectBox(sTitle, aOptions)
Dim oIE, s, item
set oIE = CreateObject("InternetExplorer.Application")
With oIE
.FullScreen = True
.ToolBar = False
.RegisterAsDropTarget = False
.StatusBar = False : .Navigate("about:blank")
Do Until .ReadyState = 4 : WScript.Sleep 100 : Loop
.width= 400
.height=200
With .document
With .parentWindow.screen
oIE.left = (.availWidth - oIE.width ) \ 2
oIE.top = (.availheight - oIE.height) \ 2
End With
s = "<html><head><title>" & sTitle _
& "</title></head><script language=vbs>bWait=true<" & "/script>" _
& "<body bgColor=Silver><center>" _
& "<b>" & sTitle & "<b><p>" _
& "<select id=entries size=1 style='width:325px'>" _
& " <option selected>" & sTitle & "</option>"
For Each item In aOptions
s = s & " <option>" & item & "</option>"
Next
s = s & " </select><p>" _
& "<button id=but0 onclick='bWait=false'>OK</button>" _
& "</center></body></html>"
.open
.Write(s)
.close
Do Until .ReadyState ="complete" : Wscript.Sleep 50 : Loop
With .body
.scroll="no"
.style.borderStyle = "outset"
.style.borderWidth = "3px"
End With
.all.entries.focus
oIE.Visible = True
CreateObject("WScript.Shell").AppActivate sTitle
On Error Resume Next
Do While .ParentWindow.bWait
WScript.Sleep 100
If oIE.Visible Then SelectBox = "Aborted"
If Err.Number <> 0 Then Exit Function
Loop
On Error Goto 0
With .ParentWindow.Entries
SelectBox = .Options(.SelectedIndex).Text
End With
End With
.Visible = False
End With
End Function
Ähnlich: http://support.microsoft.com/kb/197959/de
Grüße
bastla
Hallo Hunduster!
Ohne Deinen Forscherdrang behindern zu wollen: Eigentlich musst Du ja nur den richtigen Druckerpfad in eine Variable schreiben, was sich per "Select Case" einigermaßen übersichtlich machen ließe - Beispiel:
Grüße
bastla
Ohne Deinen Forscherdrang behindern zu wollen: Eigentlich musst Du ja nur den richtigen Druckerpfad in eine Variable schreiben, was sich per "Select Case" einigermaßen übersichtlich machen ließe - Beispiel:
Select Case sStockwerk
Case "E"
Printerpath = "\\printers.server.de\RICOH2018D"
Case "1."
Printerpath = "\\printers.server.de\HP1320NOG1l"
...
...
Case Else
'keine Etage gewählt ...
Printerpath = "\\printers.server.de\hp2800"
End Select
WSHNetwork.SetDefaultPrinter Printerpath
Grüße
bastla
Hallo bastl,
Du kennst dich ziemlich gut mit VBS aus so wie ich es hier herauslese.
Ich bin von dem Script oben von Hunduster sehr begeister. Bin gerade dabei es für unsere Firma umzuschreiben. Bin aber neuling beim VBS Programmieren.
Ich möchte gerne das Script so umschreiben, dass sich die Drucker PC-bezogen mappen und auch ein bestimmter Standard Drucker eingerichtet wird.
Info:
PC1, PC2 soll Drucker 1 mappen
PC3, PC4, PC5 soll Drucker 2 und Drucker 3 mappen, wobei Drucker 2 als Standard eingerichtet werden soll.
Wie kann ich dies Lösen?
Ich bedanke mich schon für eure Antworten.
Du kennst dich ziemlich gut mit VBS aus so wie ich es hier herauslese.
Ich bin von dem Script oben von Hunduster sehr begeister. Bin gerade dabei es für unsere Firma umzuschreiben. Bin aber neuling beim VBS Programmieren.
Ich möchte gerne das Script so umschreiben, dass sich die Drucker PC-bezogen mappen und auch ein bestimmter Standard Drucker eingerichtet wird.
Info:
PC1, PC2 soll Drucker 1 mappen
PC3, PC4, PC5 soll Drucker 2 und Drucker 3 mappen, wobei Drucker 2 als Standard eingerichtet werden soll.
Wie kann ich dies Lösen?
Ich bedanke mich schon für eure Antworten.