Anmeldescript unter MS-Server 2k3 - aber wie?
Hallo...
das Thema Anmeldescripte ist hier ja schon fast ausgereizt, trotzdem... ich komm nicht wirklich klar, wer kann helfen?
Ich möchte "ein" Anmeldescript für alle User einrichten:
Folgende Struktur ist gegeben....
User
+Freigabe Ordner Public
+Drucker 1
Gruppe 1
+Drucker 2
+Drucker 3
+Gruppenverzeichnis
Gruppe 2
+ ähnlich wie oben
Gibt es eine Möglichkeit, das automatisch abgefragt wird, welcher Gruppe die User angehören. Dementsprechend würde ich gerne die Drucker und Verzeichnisse "vergeben"!?
vbScripte sind ja recht umfangreich...
Wer kann helfen?
Danke...
das Thema Anmeldescripte ist hier ja schon fast ausgereizt, trotzdem... ich komm nicht wirklich klar, wer kann helfen?
Ich möchte "ein" Anmeldescript für alle User einrichten:
Folgende Struktur ist gegeben....
User
+Drucker 1
+Drucker 2
+Drucker 3
+Gruppenverzeichnis
+ ähnlich wie oben
Gibt es eine Möglichkeit, das automatisch abgefragt wird, welcher Gruppe die User angehören. Dementsprechend würde ich gerne die Drucker und Verzeichnisse "vergeben"!?
vbScripte sind ja recht umfangreich...
Wer kann helfen?
Danke...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2509
Url: https://administrator.de/forum/anmeldescript-unter-ms-server-2k3-aber-wie-2509.html
Ausgedruckt am: 24.12.2024 um 00:12 Uhr
16 Kommentare
Neuester Kommentar
Also mit einer normalen Batchdatei geht das nicht... da mußt du schon mit VB-Skript ran, allerdings ist das nicht ganz trivial. Ich kann dir jetzt auch nicht ein Seitenlanges Skript hier schreiben, sondern nur prinzipiell sagen, wie es geht. Du mußt dich also schon etwas damit befassen.
Es ist deswegen nicht ganz einfach, weil du den Benutzer mit dem ADS vergleichen und die Gruppenzugehörigkeit abfragen mußt. Dieser kann aber auch mehreren Gruppen angehören. Die entsprechende Gruppe muß aussortiert werden.
Nach dieser Gruppe können dann Freigaben und Drucker verteilt werden. Problematisch ist es, wenn Gruppenüberschneidungen da sind. Angenommen man hat die Gruppe Buchhaltung und Gruppe Verwaltung. Beide dürfen auf zwei unterschiedliche Bereiche zugreifen. Der Chef ist aber Mitglied beider Gruppen und darf somit auf beide Bereiche zugreifen, dann muß auch dies in deinem Skript berücksichtigt werden.
Wenn du nur ein paar Benutzer hast, dann kannst du das auch anderst lösen und nur die Benutzer abfragen,d as würde in etwa so aussehen:
*++
*++
Set WSHShell = WScript.CreateObject("WScript.Shell")
Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
user = WshShell.RegRead( Key & "\DefaultUserName" )
' Allgemein
WSHShell.run "net use m: /d"
WSHShell.run "net use n: /d"
WSHShell.run "net use n: \\company\dfs\public /persistent:no"
WSHShell.run "net use o: \\company\dfs\company /persistent:no"
select case user
case "mueller"
WSHShell.run "net use m: \\company\dfs\private\mueller /persistent:no"
case "meyer"
WSHShell.run "net use m: \\company\dfs\private\meyer /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\company\dfs\private\schmidt /persistent:no"
end select
*++
*++
Wie gesagt, daß ist nur eine Lösung, wenn du nur ein paar User hast.
1. Am Anfang wird der User abgefragt.
2. Dann werden alle Möglichen Verbindungen getrennt
3. Danach werden allgemeine Verbindungen gesetzt
4. Jetzt wird über den select der user abgefragt und dann Verbindungen hergestellt
**
Das was du vor hast, ist wesentlich komplexer... und würde hier wohl den Rahmen sprengen
Es ist deswegen nicht ganz einfach, weil du den Benutzer mit dem ADS vergleichen und die Gruppenzugehörigkeit abfragen mußt. Dieser kann aber auch mehreren Gruppen angehören. Die entsprechende Gruppe muß aussortiert werden.
Nach dieser Gruppe können dann Freigaben und Drucker verteilt werden. Problematisch ist es, wenn Gruppenüberschneidungen da sind. Angenommen man hat die Gruppe Buchhaltung und Gruppe Verwaltung. Beide dürfen auf zwei unterschiedliche Bereiche zugreifen. Der Chef ist aber Mitglied beider Gruppen und darf somit auf beide Bereiche zugreifen, dann muß auch dies in deinem Skript berücksichtigt werden.
Wenn du nur ein paar Benutzer hast, dann kannst du das auch anderst lösen und nur die Benutzer abfragen,d as würde in etwa so aussehen:
*++
*++
Set WSHShell = WScript.CreateObject("WScript.Shell")
Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
user = WshShell.RegRead( Key & "\DefaultUserName" )
' Allgemein
WSHShell.run "net use m: /d"
WSHShell.run "net use n: /d"
WSHShell.run "net use n: \\company\dfs\public /persistent:no"
WSHShell.run "net use o: \\company\dfs\company /persistent:no"
select case user
case "mueller"
WSHShell.run "net use m: \\company\dfs\private\mueller /persistent:no"
case "meyer"
WSHShell.run "net use m: \\company\dfs\private\meyer /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\company\dfs\private\schmidt /persistent:no"
end select
*++
*++
Wie gesagt, daß ist nur eine Lösung, wenn du nur ein paar User hast.
1. Am Anfang wird der User abgefragt.
2. Dann werden alle Möglichen Verbindungen getrennt
3. Danach werden allgemeine Verbindungen gesetzt
4. Jetzt wird über den select der user abgefragt und dann Verbindungen hergestellt
**
Das was du vor hast, ist wesentlich komplexer... und würde hier wohl den Rahmen sprengen
Hi,
im Resource Kit oder im ZAK (weiß nicht genau) gibt es ein Tool mit Namen ifmember.exe mit dem man die Gruppenzugehörigkeit auslesen kann. Wenn es in einem share liegt, sollte man es aus einem Script heraus aufrufen können (ähnlich wie con2prt)
im Resource Kit oder im ZAK (weiß nicht genau) gibt es ein Tool mit Namen ifmember.exe mit dem man die Gruppenzugehörigkeit auslesen kann. Wenn es in einem share liegt, sollte man es aus einem Script heraus aufrufen können (ähnlich wie con2prt)
Halt mal!
Der Vorschlag geht auch, wenn Du viele User hast.
Du musst einfach den Usernamen in einer Variablen speichern, um dann diese Variable (oder besser der Inhalt jener) mit dem immer gleich bleibenden Teil des Pfades zu "concatonaten".
So reicht eine einzige Sequenz anstelle einer massigen CASE Anweisung.
Übrigens:
Ich bin krass erstaunt, dass sowas nicht auf einfache Art in W2K3 möglich ist. Das ist für mich wie Steinzeit.
Ich administriere seit Jahren Novell. Dort geht das total einfach. Drucker werden über NDPS und dessen Datenbank RBS mittels so etwas wie ACL's dynamisch zugeteilt. Der korrekte Druckertreiber wird im Hintergrund automatisch aufgrund des Betriebssystems ausgesucht herungergeladen und installiert falls nicht vorhanden.
Verzeichnisse werden aufgrund Rollenzugehörigkeit sowie OU-Zugehörigkeit gemappt sowie Rechte, Serviceverfügbarkeit usw gesetzt. Das Ganze ist wirklich einfach und funktioniert...
Grüsse Bruno
Der Vorschlag geht auch, wenn Du viele User hast.
Du musst einfach den Usernamen in einer Variablen speichern, um dann diese Variable (oder besser der Inhalt jener) mit dem immer gleich bleibenden Teil des Pfades zu "concatonaten".
So reicht eine einzige Sequenz anstelle einer massigen CASE Anweisung.
Übrigens:
Ich bin krass erstaunt, dass sowas nicht auf einfache Art in W2K3 möglich ist. Das ist für mich wie Steinzeit.
Ich administriere seit Jahren Novell. Dort geht das total einfach. Drucker werden über NDPS und dessen Datenbank RBS mittels so etwas wie ACL's dynamisch zugeteilt. Der korrekte Druckertreiber wird im Hintergrund automatisch aufgrund des Betriebssystems ausgesucht herungergeladen und installiert falls nicht vorhanden.
Verzeichnisse werden aufgrund Rollenzugehörigkeit sowie OU-Zugehörigkeit gemappt sowie Rechte, Serviceverfügbarkeit usw gesetzt. Das Ganze ist wirklich einfach und funktioniert...
Grüsse Bruno
Hallo linkit,
deinen Ansatz für das Anmeldescript finde ich klasse.
Ich habe es einfach mal ausporbiert und es hat sofort geklappt, nur eine Kleinigkeit ist
blöd. Der User muss seinen Anmeldename entweder immer klein schreiben oder immer groß. Macht er das nicht läuft das Script einfach durch ohne ein Laufwerk zu verbinden.
Ist ja auch klar weil der den User so nicht finden kann.
Meine Lösung war, ich habe einfach alle Möglichkeiten wie ein User seinen Anmeldenamen schreiben kann mit in das Script eingebaut. Das das ist aber sehr aufwendig.
Hast du dazu nicht noch einen Tipp bzw. eine kleine Verbesserung für uns ?
Dann noch eine Frage, wie kann ich da noch einen Netzwerkdrucker der über einen PrintServer angeschloßen ist mit einbauen. Es sollte auch hier sichergestellt werden das kein anderer Drucker mehr verbunden ist.
Gruß und vielen Dank
Tigger30926
deinen Ansatz für das Anmeldescript finde ich klasse.
Ich habe es einfach mal ausporbiert und es hat sofort geklappt, nur eine Kleinigkeit ist
blöd. Der User muss seinen Anmeldename entweder immer klein schreiben oder immer groß. Macht er das nicht läuft das Script einfach durch ohne ein Laufwerk zu verbinden.
Ist ja auch klar weil der den User so nicht finden kann.
Meine Lösung war, ich habe einfach alle Möglichkeiten wie ein User seinen Anmeldenamen schreiben kann mit in das Script eingebaut. Das das ist aber sehr aufwendig.
Hast du dazu nicht noch einen Tipp bzw. eine kleine Verbesserung für uns ?
Dann noch eine Frage, wie kann ich da noch einen Netzwerkdrucker der über einen PrintServer angeschloßen ist mit einbauen. Es sollte auch hier sichergestellt werden das kein anderer Drucker mehr verbunden ist.
Gruß und vielen Dank
Tigger30926
Hallo tigger,
auch das lässt sich einfach lösen.
Der entspr. Ausschnitt aus linkits Script:
'#######################
select case LCase(user)
case "mueller"
WSHShell.run "net use m: \\company\dfs\private\mueller /persistent:no"
case "meyer"
WSHShell.run "net use m: \\company\dfs\private\meyer /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\company\dfs\private\schmidt /persistent:no"
end select
'#######################
LCase für Lower Case wandelt alles in kleinbuchstaben um, alternativ UCase für GROSSBUCHSTABEN. Muss natürlich mit dem nachfolgenden konform gehen.
Die Zeilen mit WSHShell.run "net use m: \\company\dfs\private\schmidt /persistent:no"
kann man auch auch VBS-mäßig mit MapNetworkDrive lösen.
Viele und gute Infos zu VBS kannst du auf Guy Thomas' Seite http://www.computerperformance.co.uk/ finden und natürlich im ScriptCenter http://www.microsoft.com/technet/scriptcenter/default.mspx
HTH
gemini
auch das lässt sich einfach lösen.
Der entspr. Ausschnitt aus linkits Script:
'#######################
select case LCase(user)
case "mueller"
WSHShell.run "net use m: \\company\dfs\private\mueller /persistent:no"
case "meyer"
WSHShell.run "net use m: \\company\dfs\private\meyer /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\company\dfs\private\schmidt /persistent:no"
end select
'#######################
LCase für Lower Case wandelt alles in kleinbuchstaben um, alternativ UCase für GROSSBUCHSTABEN. Muss natürlich mit dem nachfolgenden konform gehen.
Die Zeilen mit WSHShell.run "net use m: \\company\dfs\private\schmidt /persistent:no"
kann man auch auch VBS-mäßig mit MapNetworkDrive lösen.
Viele und gute Infos zu VBS kannst du auf Guy Thomas' Seite http://www.computerperformance.co.uk/ finden und natürlich im ScriptCenter http://www.microsoft.com/technet/scriptcenter/default.mspx
HTH
gemini
hast du noch eine Tipp wie ich das mit dem Drucker lösen kann?
Jetzt muss ich aber mal ganz dumm fragen. Hast du die beiden Links überhaupt angeschaut?
Drucker verbinden:
http://www.computerperformance.co.uk/Logon/LogonScript_Printer_Method.h ...
http://www.microsoft.com/technet/scriptcenter/scripts/printing/client/p ...
Standarddrucker setzen:
http://www.computerperformance.co.uk/Logon/LogonScript_Printer_Bonus.ht ...
http://www.microsoft.com/technet/scriptcenter/scripts/printing/client/p ...
Super vielen Dank, ja habe ich gleich gemacht. Aber ich habe da nicht das richtige gefunden.
Das verbinden klappt ja jetzt, aber das überpürfen ob der Drucker schon vorhanden ist geht so natürlich nicht.
Dazu kommt noch, wenn der Benutzer sich abmeldet und ein anderer Benutzer (Spätschicht) sich dann anmeldet. Behält er die Drucker des anderen. Das soll so aber so nicht sein. Gibt es nicht einen Löschbefehl der auch in einem Fehlerfall zb. wenn gar kein Drucker verbunden war, seinen Dienst verrichtet und dann keine Fehlermeldung ausgibt?
Gruß
Tigger30926
Das verbinden klappt ja jetzt, aber das überpürfen ob der Drucker schon vorhanden ist geht so natürlich nicht.
Dazu kommt noch, wenn der Benutzer sich abmeldet und ein anderer Benutzer (Spätschicht) sich dann anmeldet. Behält er die Drucker des anderen. Das soll so aber so nicht sein. Gibt es nicht einen Löschbefehl der auch in einem Fehlerfall zb. wenn gar kein Drucker verbunden war, seinen Dienst verrichtet und dann keine Fehlermeldung ausgibt?
Gruß
Tigger30926
Ich lösche die Drucker mit nachfolgender Routine bevor ich sie neu verbinde.
'############################
Const blnForce = TRUE
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
strPrintSRV1 = <Druckserver>
strComputer = LCase(WshNetwork.ComputerName)
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")
For Each objPrinter in colPrinters
If Left(objPrinter.Name, 8) = "\\" & strPrintSRV1 Then
WshNetwork.RemovePrinterConnection "\\" & strPrintSRV1 & "\" & objPrinter.ShareName, blnForce
End If
Next
'############################
'############################
Const blnForce = TRUE
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
strPrintSRV1 = <Druckserver>
strComputer = LCase(WshNetwork.ComputerName)
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")
For Each objPrinter in colPrinters
If Left(objPrinter.Name, 8) = "\\" & strPrintSRV1 Then
WshNetwork.RemovePrinterConnection "\\" & strPrintSRV1 & "\" & objPrinter.ShareName, blnForce
End If
Next
'############################
Prima Tipp, ich habe es jetzt mal so ausprobiert läuft spitze.
Hast du jetzt vielleicht noch einen Tipp wie ich ein Log-File mit einbauen kann, sodas ich dann Zentral sehen kann wenn es zu einem Fehler gekommen ist.
Ich dachte über einen Ordner im NETLOGON nach, indem die Log Files abgelegt werden, oder vielleicht in einem Ordner auf dem Client selber.
Hier unsere Script Version !!!!
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
Set Network = CreateObject("Wscript.Network")
'----------------------------------------------------------
'Angemeldeter User heraus finden
'----------------------------------------------------------
Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
user = WshShell.RegRead( Key & "\DefaultUserName" )
'----------------------------------------------------------
'Löschen eventuell bestehender Netzlaufwerke
'----------------------------------------------------------
WSHShell.run "net use e: /d"
WSHShell.run "net use f: /d"
WSHShell.run "net use g: /d"
WSHShell.run "net use h: /d"
WSHShell.run "net use j: /d"
WSHShell.run "net use n: /d"
'----------------------------------------------------------
'Löschen eventuell bestehender Printerconnections
'----------------------------------------------------------
For i = 0 To network.EnumPrinterConnections.Count - 1
On Error Resume Next
network.RemovePrinterConnection network.EnumPrinterConnections.Item(i)
Next
'----------------------------------------------------------
'Netzlaufwerke und Drucker je nach Benutzer zu ordnen
'----------------------------------------------------------
select case LCase(user)
case "fritz"
WSHShell.run "net use e: \\server\freigabename /persistent:no"
WSHShell.run "net use f: \\server\freigabename /persistent:no"
WSHShell.run "net use g: \\server\freigabename /persistent:no"
WSHShell.run "net use h: \\server\freigabename /persistent:no"
WSHShell.run "net use i: \\server\freigabename /persistent:no"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.SetDefaultPrinter "\\server\druckername"
case "meyer"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
end select
Das wars schon !!!! War gar nicht soooo schlimm.
Gruß
Tigger30926
Hast du jetzt vielleicht noch einen Tipp wie ich ein Log-File mit einbauen kann, sodas ich dann Zentral sehen kann wenn es zu einem Fehler gekommen ist.
Ich dachte über einen Ordner im NETLOGON nach, indem die Log Files abgelegt werden, oder vielleicht in einem Ordner auf dem Client selber.
Hier unsere Script Version !!!!
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
Set Network = CreateObject("Wscript.Network")
'----------------------------------------------------------
'Angemeldeter User heraus finden
'----------------------------------------------------------
Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
user = WshShell.RegRead( Key & "\DefaultUserName" )
'----------------------------------------------------------
'Löschen eventuell bestehender Netzlaufwerke
'----------------------------------------------------------
WSHShell.run "net use e: /d"
WSHShell.run "net use f: /d"
WSHShell.run "net use g: /d"
WSHShell.run "net use h: /d"
WSHShell.run "net use j: /d"
WSHShell.run "net use n: /d"
'----------------------------------------------------------
'Löschen eventuell bestehender Printerconnections
'----------------------------------------------------------
For i = 0 To network.EnumPrinterConnections.Count - 1
On Error Resume Next
network.RemovePrinterConnection network.EnumPrinterConnections.Item(i)
Next
'----------------------------------------------------------
'Netzlaufwerke und Drucker je nach Benutzer zu ordnen
'----------------------------------------------------------
select case LCase(user)
case "fritz"
WSHShell.run "net use e: \\server\freigabename /persistent:no"
WSHShell.run "net use f: \\server\freigabename /persistent:no"
WSHShell.run "net use g: \\server\freigabename /persistent:no"
WSHShell.run "net use h: \\server\freigabename /persistent:no"
WSHShell.run "net use i: \\server\freigabename /persistent:no"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.SetDefaultPrinter "\\server\druckername"
case "meyer"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
end select
Das wars schon !!!! War gar nicht soooo schlimm.
Gruß
Tigger30926
Hast du jetzt vielleicht noch einen Tipp wie ich ein Log-File mit einbauen kann, sodas ich
dann Zentral sehen kann wenn es zu einem Fehler gekommen ist.
Tipp kannst du haben dann Zentral sehen kann wenn es zu einem Fehler gekommen ist.
Beschäftige dich eingehender mit dem err-Objekt und dem FileSystemObject.
Ich dachte über einen Ordner im NETLOGON nach, indem die Log Files abgelegt
werden, oder vielleicht in einem Ordner auf dem Client selber.
Nun ja, der Benutzer unter dem das Script ausgeführt wird braucht auf dem Log-Verzeichnis Schreibrechte; ich weiß nicht, ob das auf dem NETLOGON so gut kommt?werden, oder vielleicht in einem Ordner auf dem Client selber.
Hier unsere Script Version !!!!
.
.
Das wars schon !!!! War gar nicht soooo schlimm.
Auf menschliche Sprachen umgemünzt würde man es wohl als Kauderwelsch bezeichnen .
.
Das wars schon !!!! War gar nicht soooo schlimm.
Nix für ungut, in erster Linie muss es funktionieren
So habe das Script nochmals überarbeitet und jetzt legt das Script entweder in einem freigegeben Verzeichniss oder auf dem Client selber eine Log-Datei ab.
Leider habe noch ein kleines Problem bei der Auflistung der Netzwerkdrucker. Egal was ich mache es werden immer nur zwei Drucker in die Log-Datei geschrieben.
Der erste Drucker und der Standard Drucker. Alle anderen nicht ! Was ist nur falsch?
Dann möchte ich noch die Zeit vom Client überpüfen und wenn die nicht stimmt, sie autom. abgleichen. Hat dazu auch einer eine Idee ?
'----------------------------------------------------------
'Anmeldescript für die Domäne-User / Stand 13.09.2006
'----------------------------------------------------------
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
Set Network = CreateObject("Wscript.Network")
Set MyFiles = CreateObject("Scripting.FileSystemObject")
'----------------------------------------------------------
'Angemeldeter User heraus finden
'----------------------------------------------------------
Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
user = WshShell.RegRead( Key & "\DefaultUserName" )
Do While wshNetwork.username = ""
WScript.Sleep 250
Loop
MeinDatum = Date
strComputerName = wshNetwork.computerName
strUserName = wshNetwork.userName
strDomainName = wshNetwork.userDomain
If Not MyFiles.FileExists("d:\data\" & strComputerName & "-" & user & "-" & meindatum & ".log") Then MyFiles.CreateTextFile("d:\data\" & strComputerName & "-" & user & "-" & meindatum & ".log")
Set logfile = MyFiles.OpenTextFile("d:\data\" & strComputerName & "-" & user & "-" & meindatum & ".log",8)
'----------------------------------------------------------
'Löschen eventuell bestehender Netzlaufwerke
'----------------------------------------------------------
WSHShell.run "net use * /d:yes"
'----------------------------------------------------------
'Löschen eventuell bestehender Printerconnections
'----------------------------------------------------------
For i = 0 To network.EnumPrinterConnections.Count - 1
On Error Resume Next
network.RemovePrinterConnection network.EnumPrinterConnections.Item(i)
Next
'----------------------------------------------------------
'Netzlaufwerke und Drucker je nach Benutzer zu ordnen
'----------------------------------------------------------
'* Aufruf der Subroutine
Call SubZusammenfassung
'* Die Routine
Sub SubZusammenfassung ()
'* Benötigte Deklarationen
Set colDrives = wshNetwork.EnumNetworkDrives
Set colPrinters = wshNetwork.EnumPrinterConnections
Dim CRLF
CRLF = Chr(13) & Chr(10)
'* Der Beginn des Wahnsinns
strMsg = cRLF & CRLF & "------------------" & CRLF & "Anmelde Ergebnisse" & CRLF & CRLF & "Benutzername" & Chr(9) & "= " & strUserName & CRLF & "Computername" & Chr(9) & "= " & strComputerName & CRLF & "Domäne" & Chr(9) & Chr (9) & "= " & strDomainName & CRLF
select case LCase(user)
case "fritz"
WSHShell.run "net use e: \\server\freigabename /persistent:no"
WSHShell.run "net use f: \\server\freigabename /persistent:no"
WSHShell.run "net use g: \\server\freigabename /persistent:no"
WSHShell.run "net use h: \\server\freigabename /persistent:no"
WSHShell.run "net use i: \\server\freigabename /persistent:no"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.SetDefaultPrinter "\\server\druckername"
case "meyer"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
end select
If colDrives.Count = 0 Then
strMsg = strMsg & CRLF & "Kein Netzlaufwerk ist verbunden." & CRLF
Else
strMsg = strMsg & CRLF & "Verbundene Netzlaufwerk(e):" & CRLF
For i = 0 To colDrives.Count - 1 Step 2
strMsg = strMsg & CRLF & colDrives(i) & Chr(9) & colDrives(i + 1)
Next
End If
'* Verbundene Drucker Listen
If colPrinters.Count = 0 Then
strMsg = strMsg & CRLF & CRLF & "Kein Netzwerk-Drucker ist verbunden." & CRLF
Else
strMsg = strMsg & CRLF & CRLF & "Verbundene Netzwerk-Drucker:" & CRLF
For i = 0 To colPrinters.Count - 1 Step 2
strMsg = strMsg & CRLF & colPrinters(i + 1) & Chr(9)
Next
logfile.write(strMsg)
End If
logfile.close
End Sub
Gruß
Tigger30926
Leider habe noch ein kleines Problem bei der Auflistung der Netzwerkdrucker. Egal was ich mache es werden immer nur zwei Drucker in die Log-Datei geschrieben.
Der erste Drucker und der Standard Drucker. Alle anderen nicht ! Was ist nur falsch?
Dann möchte ich noch die Zeit vom Client überpüfen und wenn die nicht stimmt, sie autom. abgleichen. Hat dazu auch einer eine Idee ?
'----------------------------------------------------------
'Anmeldescript für die Domäne-User / Stand 13.09.2006
'----------------------------------------------------------
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
Set Network = CreateObject("Wscript.Network")
Set MyFiles = CreateObject("Scripting.FileSystemObject")
'----------------------------------------------------------
'Angemeldeter User heraus finden
'----------------------------------------------------------
Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
user = WshShell.RegRead( Key & "\DefaultUserName" )
Do While wshNetwork.username = ""
WScript.Sleep 250
Loop
MeinDatum = Date
strComputerName = wshNetwork.computerName
strUserName = wshNetwork.userName
strDomainName = wshNetwork.userDomain
If Not MyFiles.FileExists("d:\data\" & strComputerName & "-" & user & "-" & meindatum & ".log") Then MyFiles.CreateTextFile("d:\data\" & strComputerName & "-" & user & "-" & meindatum & ".log")
Set logfile = MyFiles.OpenTextFile("d:\data\" & strComputerName & "-" & user & "-" & meindatum & ".log",8)
'----------------------------------------------------------
'Löschen eventuell bestehender Netzlaufwerke
'----------------------------------------------------------
WSHShell.run "net use * /d:yes"
'----------------------------------------------------------
'Löschen eventuell bestehender Printerconnections
'----------------------------------------------------------
For i = 0 To network.EnumPrinterConnections.Count - 1
On Error Resume Next
network.RemovePrinterConnection network.EnumPrinterConnections.Item(i)
Next
'----------------------------------------------------------
'Netzlaufwerke und Drucker je nach Benutzer zu ordnen
'----------------------------------------------------------
'* Aufruf der Subroutine
Call SubZusammenfassung
'* Die Routine
Sub SubZusammenfassung ()
'* Benötigte Deklarationen
Set colDrives = wshNetwork.EnumNetworkDrives
Set colPrinters = wshNetwork.EnumPrinterConnections
Dim CRLF
CRLF = Chr(13) & Chr(10)
'* Der Beginn des Wahnsinns
strMsg = cRLF & CRLF & "------------------" & CRLF & "Anmelde Ergebnisse" & CRLF & CRLF & "Benutzername" & Chr(9) & "= " & strUserName & CRLF & "Computername" & Chr(9) & "= " & strComputerName & CRLF & "Domäne" & Chr(9) & Chr (9) & "= " & strDomainName & CRLF
select case LCase(user)
case "fritz"
WSHShell.run "net use e: \\server\freigabename /persistent:no"
WSHShell.run "net use f: \\server\freigabename /persistent:no"
WSHShell.run "net use g: \\server\freigabename /persistent:no"
WSHShell.run "net use h: \\server\freigabename /persistent:no"
WSHShell.run "net use i: \\server\freigabename /persistent:no"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.AddWindowsPrinterConnection "\\server\druckername"
WshNetwork.SetDefaultPrinter "\\server\druckername"
case "meyer"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
case "schmidt"
WSHShell.run "net use m: \\server\freigabename /persistent:no"
end select
If colDrives.Count = 0 Then
strMsg = strMsg & CRLF & "Kein Netzlaufwerk ist verbunden." & CRLF
Else
strMsg = strMsg & CRLF & "Verbundene Netzlaufwerk(e):" & CRLF
For i = 0 To colDrives.Count - 1 Step 2
strMsg = strMsg & CRLF & colDrives(i) & Chr(9) & colDrives(i + 1)
Next
End If
'* Verbundene Drucker Listen
If colPrinters.Count = 0 Then
strMsg = strMsg & CRLF & CRLF & "Kein Netzwerk-Drucker ist verbunden." & CRLF
Else
strMsg = strMsg & CRLF & CRLF & "Verbundene Netzwerk-Drucker:" & CRLF
For i = 0 To colPrinters.Count - 1 Step 2
strMsg = strMsg & CRLF & colPrinters(i + 1) & Chr(9)
Next
logfile.write(strMsg)
End If
logfile.close
End Sub
Gruß
Tigger30926
Wie können wir das mit dem Zeitabgleich lösen ?
Welchen Zeitabgleich?In einer Domäne ist der authentifizierende DC automatisch autorisierender Zeitserver für den Client.
http://support.microsoft.com/kb/816042/EN-US/
INTRODUCTION
Windows includes W32Time, the Time Service tool that is required by the Kerberos authentication protocol. The purpose of the Windows Time service is to make sure that all computers that are running Microsoft Windows 2000 or later versions in an organization use a common time.
To guarantee appropriate common time usage, the Windows Time service uses a hierarchical relationship that controls authority, and the Windows Time service does not permit loops. By default, Windows-based computers use the following hierarchy:
• All client desktop computers nominate the authenticating domain controller as their in-bound time partner.
• All member servers follow the same process that client desktop computers follow.
• All domain controllers in a domain nominate the primary domain controller (PDC) operations master as their in-bound time partner.
• All PDC operations masters follow the hierarchy of domains in the selection of their in-bound time partner.
In this hierarchy, the PDC operations master at the root of the forest becomes authoritative for the organization. We highly recommend that you configure the authoritative time server to gather the time from a hardware source. When you configure the authoritative time server to sync with an Internet time source, there is no authentication. We also recommend that you reduce your time correction settings for your servers and stand-alone clients. These recommendations provide more accuracy and security to your domain.
Windows includes W32Time, the Time Service tool that is required by the Kerberos authentication protocol. The purpose of the Windows Time service is to make sure that all computers that are running Microsoft Windows 2000 or later versions in an organization use a common time.
To guarantee appropriate common time usage, the Windows Time service uses a hierarchical relationship that controls authority, and the Windows Time service does not permit loops. By default, Windows-based computers use the following hierarchy:
• All client desktop computers nominate the authenticating domain controller as their in-bound time partner.
• All member servers follow the same process that client desktop computers follow.
• All domain controllers in a domain nominate the primary domain controller (PDC) operations master as their in-bound time partner.
• All PDC operations masters follow the hierarchy of domains in the selection of their in-bound time partner.
In this hierarchy, the PDC operations master at the root of the forest becomes authoritative for the organization. We highly recommend that you configure the authoritative time server to gather the time from a hardware source. When you configure the authoritative time server to sync with an Internet time source, there is no authentication. We also recommend that you reduce your time correction settings for your servers and stand-alone clients. These recommendations provide more accuracy and security to your domain.
Falls du das aber, aus welchen Gründen auch immer, über net time machen willst, muss der jeweilige Benutzer das Recht 'Ändern der Systemzeit' haben resp. in der lokalen Gruppe Hauptbenutzer sein.
Was du konfigurieren solltest, ist die Zeitsynchronisation des DC.
Siehe obiger Link, Abschnitt 'Configuring the Windows Time service to use an external time source'