schmida 10 Geschrieben 11. Februar 2005 Melden Teilen Geschrieben 11. Februar 2005 Hallo Zusammen Ich habe wirklich keine ahnung von logon scripts, geschweige denn von vbs, muss aber rahmen einer arbeit ein logon script realisieren...und das möglichst schnell. gemäss zeitplan müsste ich heute abend fertig sein :rolleyes: Der Code des Scripts: --------------- Const INFORMATIK_GROUP = "cn=fa-informatik" Const FINANCE_GROUP = "cn=fa-finance" Const HUMAN_GROUP = "cn=fa-human" Const ADMINISTRATION_GROUP = "cn=FA-Administration" 'fährt bei fehlern mit dem nächsten befehl weiter on error resume next Set wshNetwork = CreateObject("WScript.Network") 'entfernt vorhandene Netzlaufwerke wshnetwork.removenetworkdrive "h:" wshnetwork.removenetworkdrive "z:" wshnetwork.removenetworkdrive "o:" wshnetwork.removenetworkdrive "p:" 'Fügt das Persönliche Laufwerk hinzu wshNetwork.MapNetworkDrive "h:", "\\Sdcfaas\" & wshNetwork.UserName 'Fügt das Applikationslaufwerk hinzu wshNetwork.MapNetworkDrive "z:", "\\Sdcfaas\Application" Set ADSysInfo = CreateObject("ADSystemInfo") Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName) strGroups = LCase(Join(CurrentUser.MemberOf)) If InStr(strGroups, INFORMATIK_GROUP) Then wshNetwork.MapNetworkDrive "o:", "\\Sdcfaas\FAInformatik\" wshNetwork.AddWindowsPrinterConnection "\\Sdcfaas\FA_1300N_SCHMIDA" wshNetWork.SetDefaultPrinter "\\Sdcfaas\FA_1300N_SCHMIDA" ElseIf InStr(strGroups, FINANCE_GROUP) Then wshNetwork.MapNetworkDrive "o:", "\\Sdcfaas\FAFinance\" wshNetwork.AddWindowsPrinterConnection "\\Sdcfaas\FA_1300N_SCHMIDA" wshNetWork.SetDefaultPrinter "\\sdcfaas\FA_1300N_SCHMIDA" ElseIf InStr(strGroups, HUMAN_GROUP) Then wshNetwork.MapNetworkDrive "o:", "\\Sdcfaas\FAHuman\" wshNetwork.AddWindowsPrinterConnection "\\Sdcfaas\FA_1300N_SCHMIDA" wshNetWork.SetDefaultPrinter "\\Sdcfaas\FA_1300N_SCHMIDA" End If ---------------- habe 2 probleme : 1. das Persönliche laufwerk ist ein $ share... wie kann ich den mit wshNetwork.UserName hinzufügen ???? 2. die gruppensache mit LCase(Join(CurrentUser.MemberOf)) scheint irgendwie nicht zu funktionieren. Ehrlichgesagt bin ich mir schon bei den Const nicht sicher ob dies stimmt. Die Gruppen befinden sich in einer OU "Groups" die sich wiederum in einer OU "Facharbeit" befindet und heissen: FA-Administration FA-Finance FA-Human FA-Informatik weiss jemand der rätsel lösung ? ...eine etwas Ratlose Zitieren Link zu diesem Kommentar
schmida 10 Geschrieben 11. Februar 2005 Autor Melden Teilen Geschrieben 11. Februar 2005 Rätsel 1 habe ich in zwischenzeit gelöst : wshNetwork.UserName & "$" Zitieren Link zu diesem Kommentar
Elias2k 10 Geschrieben 11. Februar 2005 Melden Teilen Geschrieben 11. Februar 2005 ich habe mich damit auch mal rumgeschlagen ... auf der ms seite gabs dazu mal was, aber war nicht wirklich hilfreich : http://www.microsoft.com/resources/documentation/windows/2000/server/scriptguide/en-us/default.mspx http://www.microsoft.com/technet/scriptcenter/default.mspx http://labmice.techtarget.com/scripting/VB.htm vielleicht hilfts Zitieren Link zu diesem Kommentar
schmida 10 Geschrieben 14. Februar 2005 Autor Melden Teilen Geschrieben 14. Februar 2005 hat mir leider nicht weitergeholfen :( hat sonst jemand eine idee wie man das lösen oder umgehen könnte? Zitieren Link zu diesem Kommentar
pepperoni 10 Geschrieben 14. Februar 2005 Melden Teilen Geschrieben 14. Februar 2005 Ja hi. Hab mir dein Script mal angesehen. Der Fehler liegt bei InStr(strGroups, INFORMATIK_GROUP),instr(strGroups, FINANCE_GROUP) und bei InStr(strGroups, HUMAN_GROUP) Schalte mal das 'on error resume next' aus, dann siehst du in welcher Zeile der Fehler auftritt. Du musst jeweils noch ein > 0 anhängen, da du in der IF-Anweisung eine Abfrage auf das Ergebnis stellst, welches instr zurückliefert. Dieses stellt nähmlich die Position in dem String als Integer dar. Position = instr(String1,String2) if instr(strgroups,informatik_group) > 0 then Wscript.echo "Ja es ist dabei" else Wscript.echo "Ne ne. Is nicht dabei" end if Zitieren Link zu diesem Kommentar
pepperoni 10 Geschrieben 14. Februar 2005 Melden Teilen Geschrieben 14. Februar 2005 Noch ne kleine Anmerkung. Installier dir doch mal dieses hier. http://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/DE/scd56de.exe Ist die Befehlsreferenz von MS für WSH auf deutsch. Da steht schon vieles drin, auch mit Beispielcodes usw. Zitieren Link zu diesem Kommentar
schmida 10 Geschrieben 14. Februar 2005 Autor Melden Teilen Geschrieben 14. Februar 2005 vielen herzlichen dank ! es funktioniert ! :D Zitieren Link zu diesem Kommentar
schmida 10 Geschrieben 14. Februar 2005 Autor Melden Teilen Geschrieben 14. Februar 2005 ...es funktioniert doch noch nicht ganz, aber ich vermute das hängt nur indirekt mit dem script zusammen : ich habe einen domain admin user AS, mit diesem funktioniert alles perfekt. wenn ich jedoch mit einem normalen user einlogge erhält er die allgemeinen laufwerke, jedoch nicht das, dass je nach gruppenzugehörigkeit zugewiesen wird... während meiner ersten veruche mit den gruppenzugehörigkeiten mit einer box die mir die gruppen anzeigte, hatte ich festgestellt, dass beim admin user die gruppen angezeigt werden, wenn das LCase(Join(CurrentUser.MemberOf)) steht... mit den normalen usern hat es nur etwas angezeigt, wenn ich das Join herausgenommen habe... Zitieren Link zu diesem Kommentar
pepperoni 10 Geschrieben 14. Februar 2005 Melden Teilen Geschrieben 14. Februar 2005 Hab das jetzt nochmal getestet. Also bis jetzt ist mir dazu noch keine Lösung eingefallen. Es ist wohl offensichtlich so, dass bestimmte befehle nicht so interpretiert werden, wenn man keine Adminrechte hat. Das Problem liegt auf jedenfall darin, dass currentuser.memberof ein Object mit den verschiedenen einträgen in der AD im bezug auf die Gruppenzugehörigkeit darstellt QUASI ein ARRAY mit bestimmten werten GUPPE[1]= "dc=server .... GUPPE[2]= "dc=server .... usw. Als Admin kann man nun dieses Object auswerten, als Normalsterblicher eben nicht. Ich hab bis aber noch keine Ahnung wie man dies Umgehen kann. Der Fehler liegt also nicht am join sonder ander Fehlenden Berechtigung Objecte dieser Ar verwerten zu können. strGroups = LCase(Join(CurrentUser.MemberOf," ")) Diese Zeile kann man alternativ auch noch so darstellen: for each element in CurrentUser.MemberOf strgroups = strgroups & element & ";" next Wscript.Echo strgroups jedoch selbst hier ist es nicht möglich als User darauf zuzugreifen, aber ich versuchs noch ein bisschen Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 14. Februar 2005 Melden Teilen Geschrieben 14. Februar 2005 Hi versuche es mit diesem Script. msgbox dann durch deine Befehle ersetzen. Dim WshNetwork Set WshNetwork = WScript.CreateObject("WScript.Network") Dim strDomain : strDomain = WshNetwork.UserDomain Dim strUser : strUser = WshNetwork.UserName If IsMember("Administratoren") Then msgbox "Administratoren" End If If IsMember("Domänen-Gäste") Then msgbox "Domänen-Gäste" End If If IsMember("Organisations-Admins") Then msgbox "Organisations-Admins" End If If IsMember("Richtlinien-Ersteller-Besitzer") Then msgbox "Richtlinien-Ersteller-Besitzer" End If If IsMember("Schema-Admins") Then msgbox "Schema-Admins" End If If IsMember("Domänen-Admins") Then msgbox "Domänen-Admins" End If Function IsMember(strGroup) Dim objMember, objGroup On Error Resume Next Set objGroup = GetObject("WinNT://" & strDomain & "/" & strGroup & ",group") If Err.Number = 0 Then IsMember = objGroup.IsMember("WinNT://" & strDomain & "/" & strUser) End If On Error Goto 0 End Function thorgood Zitieren Link zu diesem Kommentar
schmida 10 Geschrieben 15. Februar 2005 Autor Melden Teilen Geschrieben 15. Februar 2005 danke ! das tut auch mit dem normalsterblichen user :D hat mir vielleicht noch jemand einen tipp bezüglich einer box, die mir alle angehängten laufwerke anzeigt ? ich habe eine variante die mir fast unzählige message boxes anzeigt (für jedes laufwerk ne neue) WScript.Echo "Domäne = " & WshNetwork.UserDomain _ &vbCr & "Computername = " & WshNetwork.ComputerName _ &vbCr & "Benutzername = " & WshNetwork.UserName _ &vbCr & "Zuordnungen der Netzlaufwerke:" For i = 0 to oDrives.Count - 1 Step 2 WScript.Echo "Laufwerk " & oDrives.Item(i) & " = " & oDrives.Item(i+1) next krieg ich das alles irgendwie in eine box gepackt ? Zitieren Link zu diesem Kommentar
pepperoni 10 Geschrieben 15. Februar 2005 Melden Teilen Geschrieben 15. Februar 2005 Also so ungefähr, falls du das meinst. WScript.Echo "Domäne = " & WshNetwork.UserDomain _ &vbCr & "Computername = " & WshNetwork.ComputerName _ &vbCr & "Benutzername = " & WshNetwork.UserName _ &vbCr & "Zuordnungen der Netzlaufwerke:" For i = 0 to oDrives.Count - 1 Step 2 LAUFWERKE = LAUFWERKE & oDrives.Item(i) & " = " & oDrives.Item(i+1) & vbcrlf next WScript.Echo LAUFWERKE Zitieren Link zu diesem Kommentar
schmida 10 Geschrieben 15. Februar 2005 Autor Melden Teilen Geschrieben 15. Februar 2005 genau das meinte ich :) aber ich glaub bei jeden problem was beseitigt wird, entsteht n neues die laufwerke erscheinen im dialog nur, wenn sie schon angehängt waren und nicht erst beim login-vorgang gemappt werden... Zitieren Link zu diesem Kommentar
pepperoni 10 Geschrieben 15. Februar 2005 Melden Teilen Geschrieben 15. Februar 2005 Ich glaub bevor du diese For Schleife laufen läßt, musst du dir das Object oDrives nochmal mittels getobject erneut holen, da du es, so vermute ich es einfach mal, vor dem Mappen der Laufwerke holst und dann die aktuellen Mappings nicht enthalten sind. Poste doch nochmal dein aktuelles Script, zum besseren Verständnis. Zitieren Link zu diesem Kommentar
schmida 10 Geschrieben 16. Februar 2005 Autor Melden Teilen Geschrieben 16. Februar 2005 Das aktuelle Skript : Dim WshNetwork Set WshNetwork = WScript.CreateObject("WScript.Network") Dim strDomain : strDomain = WshNetwork.UserDomain Dim strUser : strUser = WshNetwork.UserName Set oDrives = WshNetwork.EnumNetworkDrives Set oPrinters = WshNetwork.EnumPrinterConnections 'fährt bei fehlern mit dem nächsten befehl weiter on error resume next 'entfernt vorhandene Netzlaufwerke wshnetwork.removenetworkdrive "h:" wshnetwork.removenetworkdrive "z:" wshnetwork.removenetworkdrive "o:" wshnetwork.removenetworkdrive "p:" 'Fügt das Persönliche Laufwerk hinzu wshNetwork.MapNetworkDrive "h:", "\\Sdcfaas\" & wshNetwork.UserName & "$" 'Fügt das Applikationslaufwerk hinzu wshNetwork.MapNetworkDrive "z:", "\\Sdcfaas\Application" 'Fügt das Firmenlaufwerk hinzu wshNetwork.MapNetworkDrive "p:", "\\Sdcfaas\FA" 'Fügt den Printer hinzu und Setzt ihn als Standard wshNetwork.AddWindowsPrinterConnection "\\Sdcfaas\FA_1300N_SCHMIDA" wshNetWork.SetDefaultPrinter "\\Sdcfaas\FA_1300N_SCHMIDA" If IsMember("fa-administration") Then wshNetwork.MapNetworkDrive "o:", "\\Sdcfaas\FAAdministration" End If If IsMember("fa-informatik") Then wshNetwork.MapNetworkDrive "o:", "\\Sdcfaas\FAInformatik" End If If IsMember("fa-human") Then wshNetwork.MapNetworkDrive "o:", "\\Sdcfaas\FAHuman" End If If IsMember("fa-finance") Then wshNetwork.MapNetworkDrive "o:", "\\Sdcfaas\FAFinance" End If Function IsMember(strGroup) Dim objMember, objGroup On Error Resume Next Set objGroup = GetObject("WinNT://" & strDomain & "/" & strGroup & ",group") If Err.Number = 0 Then IsMember = objGroup.IsMember("WinNT://" & strDomain & "/" & strUser) End If On Error Goto 0 End Function For i = 0 to oDrives.Count - 1 Step 2 LAUFWERKE = LAUFWERKE & oDrives.Item(i) & " = " & oDrives.Item(i+1) & vbcrlf next For i = 0 to oPrinters.Count - 1 Step 2 PRINTER = PRINTER & oPrinters.Item(i) & " = " & oPrinters.Item(i+1) & vbcrlf next WScript.Echo "Herzlich Willkommen im Testnetzwerk !"_ &vbCr & " "_ &vbCr &"Domäne = " & WshNetwork.UserDomain _ &vbCr & "Computername = " & WshNetwork.ComputerName _ &vbCr & "Benutzername = " & WshNetwork.UserName _ &vbCr & " "_ &vbCr & "Zuordnungen der Netzlaufwerke:"_ &vbCr & LAUFWERKE _ &vbCr & " "_ &vbCr & "Zuordnung der Netzwerkdrucker"_ &vbCr & PRINTER Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.