cjaugey
Goto Top

Anmeldeskript Win SBS 2003 mit WinXP

Drucker Mapping mit login.vbs - Anmeldeskript für User bei Win SBS 2003 Std.Edition und WinXP Clients

System: Windows SBS 2003 Std. Edition mit 5 Win XP-Clients
Hallo,
ich habe folgende Problemstellung und würde mich über Hilfe freuen:

1) Der bei uns installierte WinSBS2003-Server verwendet ein Anmeldeskript (login.vbs) zum Mappen von Netzlaufwerken und Netzwerkdruckern.
Bisher funktionierte dies mit den zwei vorhandenen per LAN-Kabel am Server angeschlossenden Druckern einwandfrei.
Ich habe jedoch einen dritten Drucker hinzufügen wollen, der per USB-KAbel am Server hängt, und daher das Skript um eine Zeile ergänzt (s.u.).
Trotz der Ergänzung und Neustart des Servers und der Clients wird der neue Drucker NICHT automatisch gemappt.

2) Manuell lässt sich der neue Netzwerk-Drucker an den Clients jedoch problemlos hinzufügen und der Drucker funktioniert auch.
Der Pfad und NAME des Druckers ist im Skript korrekt wiedergegeben, exakt so, wie ich ihn beim manuellen Mappen am Client eingebe.

3) Das Anmeldeskript "login.vbs" enthält zum Thema Druckermapping folgenden Text:

If INGROUP ("NAMESICHERHEITSGRUPPE") Then
WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_1"
WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_2"
WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_3_NEU"
Rem WSHNetwork.SetDefaultPrinter "\\SERVERNAME\DRUCKER_1"
End If

4) Das SBS_LOGIN_SCRIPT.bat enthält ausschliesslich folgenden Code:

\\SERVERNAME\Clients\Setup\setup.exe /s SERVERNAME


Jetzt meine Frage: Wo liegt der Fehler?

Danke für Feedback!
Cyril

Content-Key: 88647

Url: https://administrator.de/contentid/88647

Printed on: April 25, 2024 at 00:04 o'clock

Member: Biber
Biber May 28, 2008 at 16:40:00 (UTC)
Goto Top
Moin cjaugey,

steht eventuell ein "on error goto 0" im nicht relevanten Teil des Loginscripts und werden eventuell die Drucker nicht vorher im Skript gelöscht?

Da läuft das Skript beim ersten bereits vorhandenen Drucker auf eine Mine (Kein Add möglich, weil ja schon vorhanden). Und zu der zeile mit dem nicht installierten Drucker kömmt er gar nicht.

tausche doch mal einfach die beiden Drucker1- und die DruckerNeu-Zeilen.

Grüße
Biber
Member: cjaugey
cjaugey May 28, 2008 at 17:12:05 (UTC)
Goto Top
Danke für die schnelle Antwort.
Das Komplette login.vbs sieht so aus:

'**********************************************************************************   
' Set Environment Variables   
'*********************************************************************************   
Set WSHNetwork = WScript.CreateObject("WScript.Network")   
Set WSHShell = WScript.CreateObject("WScript.Shell")   

On Error Resume Next 

Domain = WSHNetwork.UserDomain 
UserName = ""   

While UserName = ""   
UserName = WSHNetwork.UserName 
MyGroups = GetGroups(Domain, UserName) 
Wend

'*********************************************************************************   
' Main Process:  
'*********************************************************************************   
GrpMeb UserName 
Wscript.Quit 

'*********************************************************************************   
'Function: GetGroups  
'*********************************************************************************   
Function GetGroups(Domain, UserName) 
Set objUser = GetObject("WinNT://" & Domain & "/" & UserName)   
GetGroups=""   
For Each objGroup In objUser.Groups 
GetGroups=GetGroups & "[" & UCase(objGroup.Name) & "]"   
Next 
End Function 

'********************************************************************************   
'Function: InGroup   
'********************************************************************************   
Function InGroup(strGroup) 
InGroup=False 
If InStr(MyGroups,"[" & UCase(strGroup) & "]") Then   
InGroup=True 
End If 
End Function 

'********************************************************************************   
'Map Drives:  
'********************************************************************************   
Sub GrpMeb(UNAME)

If INGROUP ("NAMESICHERHEITSGRUPPE") Then  
WSHNetwork.MapNetworkDrive "R:","\\SERVERNAME\ORDNER_1", TRUE  
WSHNetwork.MapNetworkDrive "S:","\\SERVERNAME\ORDNER_2", TRUE  
End If

'********************************************************************************   
'Map Printer:  
'********************************************************************************   
If INGROUP ("NAMESICHERHEITSGRUPPE") Then  
WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_1"  
WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_2"  
WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_3_NEU"  
Rem WSHNetwork.SetDefaultPrinter "\\SERVERNAME\DRUCKER_1"  
End If

End Sub 

Sieht also tatsächlich so aus, als würden die Drucker nicht erst entfernt. In der Tat habe ich den Eindruck, als würden Änderungen an dem Skript GAR nicht brücksichtigt (obwohl ich sicherheitshalber in der Gruppenrichtlinienverwaltung beim Skript den Objektstatus einmal auf 'deaktiviert' und dann wieder auf 'aktiviert' gesetzt habe). Muss man vielleicht sonst noch irgendwo dafür sorgen, dass das geänderte Skript auch tatsächlich "angewendet" wird (z.B. durch Serverneustart, o.Ä.)?

Wie müssten denn die Code-Zeilen lauten, um die das Skript ergänzt werden muss?

Wäre das hier (eingefügt VOR dem bisherigen Skript-Abschnitt "Map Printer" vielleicht eine Lösung?:

'*********************************************************************************   
'Delete All Network Printer Maps:   
'*********************************************************************************   

If Left(WSHPrinters.Item(LOOP_COUNTER +1),2) = "\\" Then  
      WSHNetwork.RemovePrinterConnection WSHPrinters.Item(LOOP_COUNTER +1),True,True
    End If

On error resume next

Set WshNetwork = WScript.CreateObject("WScript.Network")  
Set oPrinters = WshNetwork.EnumPrinterConnections
For i = 0 to oPrinters.Count - 1 Step 2
WScript.Echo oPrinters.Item(i+1)
WshNetwork.RemovePrinterConnection oPrinters.Item(i+1)

Next


Gruß
Cyril
Member: Biber
Biber May 28, 2008 at 17:54:30 (UTC)
Goto Top
Moin Cyril,

(z.B. durch Serverneustart, o.Ä.)?
Na, so brutal nun nicht.. aber ein "gpupdate /force" könnte helfen.

Zu dem Skript:
Eine Forumssuche zu "RemovePrinterConnection" sollte (nach meiner Erinnerung) mehrere Beispiele liefern.
Insbesondere User gemini hat dazu ein paar Praxis/Produktiv-Beispiele gepostet.

Und nochmal zu dem Skript:
Wenn dort steht/stand "on Error macheinfachweiter", dann sieht es eher danach aus, als wenn wirklich das "neue" Skript noch gar nicht angezogen wird.
Denn funktionieren sollte es ja - auch wenn bei jedem gottverdammten Login mit In-Kauf-genommenen und einfach ignorierten Fehlern.

Schweineprogrammierung hieß das früher, bevor M$ sich durchsetzte.

Grüße
Biber
Member: cjaugey
cjaugey May 28, 2008 at 18:53:04 (UTC)
Goto Top
Hallo Biber,

also ich habe

- versuchsweise den neuen Drucker an die erste Stelle gesetzt
- und dann gpupdate /force ausgeführt.
=> Es hat nichts geändert, der neue Drucker wird beim User-Logon NICHT gemappt.

Ausserdem habe ich folgendes probiert:
- Als User am Client eingeloggt.
- Einen der beiden ALTEN (=schon früher im Skript enthalten) Netzwerkdrucker manuell entfernt ("löschen")
- User abgemeldet und neu angemeldet.
=> selbst der soeben gelöschte ALTE Drucker wird nicht neu gemappt, ich muß ihn manuell mappen (dito für den NEUEN Drucker).

Bevor ich lange das Skript optimiere, stellt sich also zunächst die Frage, warum das Skript möglicherweise/offenbar GAR nicht gezogen wird, bzw. welche Einstellung ggf. dafür sorgt, dass die Skript-Zeilen zum Drucker-Mapping nichts bewirken.
Sonst kann ich da ja die tollsten "RemovePrinterConnection"-Schleifen einbauen...

Irgendwelche Ideen?

Grüße
Cyril

P.S. Bzgl. "Schweineprogrammierung": Die Installation des SBS2003 erfolgte durch ein großes (!) deutsches IT-Haus, für entsprechendes Geld, zugegebenermaßen allerdings unter ziemlichem Zeitdruck... face-smile
Member: Biber
Biber May 28, 2008 at 19:21:31 (UTC)
Goto Top
Moin Cyril,

wenn es manuell gestartet klappt, dann hat ja auch der Computer oder User oder die Abteilung (ich weiß ja nicht, auf was sich deine SICHERHEITSGRUPPE bezieht) das Recht, die Druckerinformationen zu lesen. Den Fehler können wir wohl ausschließen.

Probier noch mal ein
gpupdate /target:computer /force /wait:0
Mit "computer" natürlich diurch den Computernamen ersetzt.

Muss schon an der Ecke sein... *grübel*

P.S.
Bzgl. "Schweineprogrammierung": Die Installation des SBS2003 erfolgte durch ein großes (!) deutsches IT-Haus...
Ein so genannter Schweineladen meinst Du?
Member: cjaugey
cjaugey May 29, 2008 at 09:33:53 (UTC)
Goto Top
Hallo Biber,

gpupdate /target:computer /force /wait:0

hat leider nicht funktioniert ("computer" natürlich durch den richtigen Namen ersetzt).
(Am Rande: die Sicherheitsgruppe umfasst ALLE USER.)

Ich habe irgendwo noch was von "Richtlinienergebnissatz" gelesen. Kann es hiermit noch etwas zu tun haben?

Cyril
Member: cjaugey
cjaugey Jun 04, 2008 at 14:24:46 (UTC)
Goto Top
Hallo,

ich habe jetzt eine (zwar nicht perfekt, aber zumindest vorerst akzeptable) Lösung des Problems.
Das Skript sieht jetzt so aus:

'**********************************************************************************  
' Set Environment Variables  
'*********************************************************************************  
Set WSHNetwork = WScript.CreateObject("WScript.Network")  
Set WSHShell = WScript.CreateObject("WScript.Shell")   

On Error Resume Next 

Domain = WSHNetwork.UserDomain
UserName = ""   

While UserName = ""   
	UserName = WSHNetwork.UserName 
	MyGroups = GetGroups(Domain, UserName) Wend

'*********************************************************************************  
' Main Process:  
'*********************************************************************************  
GrpMeb UserName
Wscript.Quit 

'*********************************************************************************  
'Function: GetGroups  
'*********************************************************************************  
Function GetGroups(Domain, UserName) 
	Set objUser = GetObject("WinNT://" & Domain & "/" & UserName)   
	GetGroups=""   
	For Each objGroup In objUser.Groups 
		GetGroups=GetGroups & "[" & UCase(objGroup.Name) & "]"   
	Next
End Function 

'********************************************************************************  
'Function: InGroup  
'********************************************************************************  
Function InGroup(strGroup) 
	InGroup=False 
	If InStr(MyGroups,"[" & UCase(strGroup) & "]") Then   
		InGroup=True 
	End If
End Function 

'********************************************************************************  
'Map Drives:  
'********************************************************************************  
Sub GrpMeb(UNAME)

Set oNetworkDrives = WSHNetwork.EnumNetworkDrives For i=0 to oNetworkDrives.Count -1 Step 2
	Rem WScript.Echo i & " - " & oNetworkDrives.Item(i)  
	If oNetworkDrives.Item(i) <> "P:" AND Right(oNetworkDrives.Item(i),1) = ":" Then  
		WSHNetwork.RemoveNetworkDrive oNetworkDrives.Item(i), TRUE
		WScript.Sleep (1000)
	End If
Next

If INGROUP ("NAMESICHERHEITSGRUPPE") Then  
	WSHNetwork.MapNetworkDrive "R:","\\SERVERNAME\ORDNER_1", TRUE  
	WScript.Sleep (1000)
	WSHNetwork.MapNetworkDrive "S:","\\SERVERNAME\ORDNER_2", TRUE  
	WScript.Sleep (1000)
End If


'********************************************************************************  
'Map Printer:  
'********************************************************************************  
If INGROUP ("NAMESICHERHEITSGRUPPE") Then  
	WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_3_NEU"  
	WScript.Sleep (1000)
	WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_1"  
	WScript.Sleep (1000)	
	WSHNetwork.AddWindowsPrinterConnection "\\SERVERNAME\DRUCKER_2"  
	WScript.Sleep (1000)
End If

End Sub

Danke nochmal für die Hilfe,
Cyril