xcaschox
Goto Top

Laufwerksmapping funktioniert nicht sauber.... Windows 8

Hallo,
ich versuche mal mein Problem zu beschreiben.

Wir nutzen Windows XP und 7 und seit kurzem Windows 8 sowie einen Windows 2008 R2 Server in unserem Netzwerk.

Laufwerke werden per Script beim Login gemappt, dieses funktioniert auch einwandfrei bis auf den Win8 PC´s.

kurze Übersicht über die Ordnerstruktur:

Server 1 hat einen Ordner (Daten) dieser wir auf Laufwerk J: gemappt
im Ordner Daten gibt es mehrere Unterordner (Abteilung 1, Abteilung 2, usw. Transfer, Public, etc)

Diese Ordner werden dann auf weitere Laufwerke gemappt.

Wenn ich jetzt die Laufwerke anklicke sehe ich nicht den Inhalt der gemappt Ordner sondern quasi den obersten Freigegebenen Ordner.


Führe ich das Script manuell aus, wird alles korrekt angezeigt und gemappt.


Ich hoffe ich konnte mein Problem einigermaßen gut beschreiben.

Danke schon mal für Eure Hilfe

LG
Carsten

Content-ID: 213350

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

Nobody-Is-Perfect
Nobody-Is-Perfect 05.08.2013 um 12:49:13 Uhr
Goto Top
Hi,

könnte es das Problem sein?
Windows 8 Logon Script wird nicht gestartet

UAC ist manchmal richtig böse face-wink

Grüße
XcaschoX
XcaschoX 05.08.2013 um 16:14:03 Uhr
Goto Top
Hi,
UAC ist ausgeschaltet......

LG
Carsten
Nobody-Is-Perfect
Nobody-Is-Perfect 05.08.2013 um 17:04:45 Uhr
Goto Top
Kannst Du dann mal den Mapping-Teil Deines Scripts
und eine Ausgabe von "NET USE" in einer CMD-Shell direkt
nach der Anmeldung posten?

So langsam wird das Thema interessant face-wink
Chris-75
Chris-75 06.08.2013 um 07:52:15 Uhr
Goto Top
Die UAC kann man in Windows 8 nicht mehr ausschalten, diese ist selbst auf niedrigster Stufe immer noch aktiv.
XcaschoX
XcaschoX 06.08.2013 aktualisiert um 12:25:08 Uhr
Goto Top
Hallo,

hier der Auszug aus dem vbs....

Dim objFSO,objFILE,objShell,objNetwork,strKeyPath, strValueName,strComputer
set objFSO=CreateObject("Scripting.FileSystemObject")
set objShell=CreateObject("Wscript.Shell")
set objNetwork=CreateObject("Wscript.Network")

'Map network drives
'***

If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "J:","\\SERVERNAME\SHARE"
If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "L:","\\SERVERNAME\SHARE\DATA\ACCOUNT"
If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "O:","\\SERVERNAME\SHARE\DATA\Transfer"


Wie bereits gesagt, wenn ich das Script nach dem Anmelden nochmal ausführe geht alles.
Auch net use funktioniert. Habe allerdings die Laufwerke vorher getrennt.


dass die UAC in Win 8 auch auf kleinster Stufe noch aktiv ist, habe ich auch herausgefunden.

Habe jetzt die UAV auf niedrig gestellt und folgenden Eintrag in der Registry auf "0" gesetzt.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLUA"=dword:00000000

Leider funktioniert es immer noch nicht.

Danke an Alle.

Gruß
C.
Nobody-Is-Perfect
Nobody-Is-Perfect 06.08.2013 um 13:59:53 Uhr
Goto Top
Hi,

wenn ich das vorher richtig verstanden habe, sind die Shares "Account" und "Transfer" auch eigenständig eingetragen.
Müsste dann die Verbindung nicht auf "\\SERVERNAME\ACCOUNT" und "\\SERVERNAME\Transfer" lauten?

Oder hab ich jetzt schon einen Hitzeschaden?

Grüße, Nobody
XcaschoX
XcaschoX 06.08.2013 um 16:11:39 Uhr
Goto Top
Hi Nobody,
ja du hast recht, habe mich nur vertippt.....

das DATA gehört nicht dahin.

es ist jetzt auf jeden fall so, das wenn ich auch das Mapping von J - L - O klicke,
sehe ich immer alle drei Ordner und nicht den entsprechenden Inhalt.

Gruß
Carsten
Nobody-Is-Perfect
Nobody-Is-Perfect 06.08.2013 um 16:39:40 Uhr
Goto Top
Hi,

nochmal ... wenn ACCOUNT ein Share ist, was ich mal annehme, sollte die Verbindung nur \\SERVERNAME\ACCOUNT" lauten, nicht "\\SERVERNAME\SHARE\ACCOUNT". Entsprechendes natürlich auch für den anderen Share.

Die Zeilen müsste also eher so lauten:
If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "L:","\\SERVERNAME\ACCOUNT"  
If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "O:","\\SERVERNAME\Transfer"  

Gruß, Nobody
XcaschoX
XcaschoX 07.08.2013 um 08:28:18 Uhr
Goto Top
Hi,
nochmal, also auf dem Server gibt es eine Ordner mit dem Namen "Share" in diesem Ordner gibt es die Ordner "Account", "Data", Transfer.

J zeigt auf den Ordner "Share,
L zeigt auf den Ordner "Account"
O zeigt auf den Ordner "Transfer"

von daher stimmt mein Script, da es ja auch unter XP, Windows 7 ohne Probleme läuft.
Nur eben nicht unter Windows 8.
Allerdings, wenn ich nach dem Login alle Netzwerk-Laufwerke lösche und dann das Script ausführe funktioniert alles Tipp-Top.

Daher ist wohl nicht das Script falsch, sondern evtl irgendwelche Settings an Windows 8.

Gruß
Carsten
Nobody-Is-Perfect
Nobody-Is-Perfect 07.08.2013 um 11:55:55 Uhr
Goto Top
Moin,

okay ... ich glaube, nun habe ich dein Mapping verstanden. Ist zwar ungewöhnlich, geht aber trotzdem.

Das Netzwerk-Mapping hat sich jedoch über die verschiednene Windows - Versionen immer etwas geändert.
Was unter XP ging, muss unter Windows 8 noch lange nicht funktionieren.

Ehrlich gesagt, habe ich das Mapping jedoch noch nie mit einem VB-Script realisiert.
Da kam im Nomalfall eine Batch zum Einsatz.

Ich habe das gerade extra mal nachgestellt mit einem einfachen Batch-Script mit entsprechenden NET USE - Befehlen.
Dabei kommt es nicht zu deinen Probleme, alle Laufwerke werden so gemapped, wie gewollt.

Benutzt Du für den MapIt dieses http://www.tek-tips.com/viewthread.cfm?qid=966050 Script?
Dann könnte man den Fehler nachstellen.

Grüße, Nobody
XcaschoX
XcaschoX 07.08.2013 um 14:21:55 Uhr
Goto Top
Hi,
hier mal das ganze Script:

'Created: 02/29/2012 09:00:00 PM
'
'Created by SAPIEN Technologies, Inc. Logon Script Generator
'

Dim instances, instance, cs
Set instances = GetObject(_
"winmgmts:./root/cimv2")._
InstancesOf(_
"Win32_ComputerSystem")
For each instance in instances
Set cs = instance
next
If cs.DomainRole > 1 Then
WScript.Quit
End If


On Error Resume Next
Dim objFSO,objFILE,objShell,objNetwork,strKeyPath, strValueName,strComputer
set objFSO=CreateObject("Scripting.FileSystemObject")
set objShell=CreateObject("Wscript.Shell")
set objNetwork=CreateObject("Wscript.Network")

'Map network drives
'
*

'*Global Mappings
If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "J:","\\Servername\SHARE"
If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "S:","\\Servername\SHARE\SCAN"
If IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1") Then MapIt "O:","\\Servername\SHARE\Transfer"


'End of main script


'

'Function PasswordExpires(strDomain,strUser)
'On Error Resume Next
'Dim objUser
'Set objUser=GetObject("WinNT:" & strDomain & "/" & strUser & ",user")
'PassExp=INT(objUser.MaxPasswordAge/86400)-INT(objUser.PasswordAge/86400)

'If PassExp<0 Then
' strPassMsg="Your password never expires."
'Else
'strPassMsg="Your password expires in " & PassExp & " day(s)"
'end If

'PasswordExpires=strPassMsg
'End Function

Function IsAMemberOf(strDomain,strUser,strGroup)
On Error Resume Next
Set objUser=GetObject("WinNT:
" & strDomain & "/" & strUser & ",user")
Set objGrp=GetObject("WinNT://" & strDomain & "/" & strGroup & ",group")

If objGrp.IsMember(objUser.ADsPath) Then
IsAMemberOf=True
Else
IsAMemberOf=False
End If

End Function

Sub MapIt(strDrive,strMap)
On Error Resume Next
If objFSO.DriveExists(strDrive) Then objNetwork.RemoveNetworkDrive(strDrive)

objNetwork.MapNetworkDrive strDrive,strMap

If Err.Number<>0 And blnShowError Then
strMsg="There was a problem mapping drive " & UCase(strDrive) & " to " &_
strMap & VbCrLf & strHelpMsg & VbCrLf & "Error#:" & Hex(err.Number) &_
VbCrLf & Err.Description
objShell.Popup strMsg,iErrorTimeOut,"Error",vbOKOnly+vbExclamation
Err.Clear
End If

End Sub


Gruß
Carsten
Nobody-Is-Perfect
Nobody-Is-Perfect 07.08.2013 um 16:10:11 Uhr
Goto Top
Hi,

Tja, was soll ich sagen ... kaum dass ich einen von meinen Shares mit Unterverzeichnissen eingetragen habe, läuft das Script fehlerfrei.
Und das sogar, obwohl es bei mir keine "Gruppe1" gibt ==> da gibt es also sicher noch Verbesserungsbedarf im Script.

Ansonsten läuft das Teil auf meiner Windows 8 Enterprise wunderbar und das auch mit eingeschalteter UAC.

Da muss also noch irgendetwas anderes störend sein.
Ich würde zunächst mal ein Popup z.B. mit dem aktuell verwendeten User und Domainname an den Anfang stellen,
damit die Ausführung sicher nach der Anmeldung (und nach dem Click) stattfindet.

Wenn das Popup jedoch nicht den aktuellen Nutzernamen zeigt, wäre auch das ein Hinweis.

Wenn es jedoch hilft, dann einfach das Script am Anfang verzögern, statt dem Popup.

Gruß, Nobody
XcaschoX
XcaschoX 07.08.2013 um 16:17:58 Uhr
Goto Top
Hi,
jetzt komme ich an meine Grenzen den ich bin ein absoluter script newbie, das script habe ich mit einen tool erstellt.....
Popup, verzögern, ????

Gruß
C.
Nobody-Is-Perfect
Nobody-Is-Perfect 07.08.2013 um 16:29:25 Uhr
Goto Top
Okay,

einfach diese Zeile vor die If-Zeilen einfügen:
objShell.PopUp "User" & objNetwork.UserDomain & "\" & objNetwork.UserName & ", IsMember:" & IsAMemberOf(objNetwork.UserDomain,objNetwork.UserName,"Gruppe1")  

Das sollte das Script aufhalten, bis das popup bestätigt ist.

Gruß, Nobody
XcaschoX
XcaschoX 07.08.2013 um 16:41:47 Uhr
Goto Top
ok, werde es morgen gleich mal testen....

und ohne Popup?

Danke
Carsten
Nobody-Is-Perfect
Nobody-Is-Perfect 07.08.2013 um 17:00:41 Uhr
Goto Top
Na denn ...
wenn das Popup hilft,
dann wäre es auszuprobieren:

WScript.Sleep 1000

wobei das eine Wartezeit von 1 Sekunde wäre.
Mit dem Wert müsste man dann rumspielen, bis ein passender gefunden ist.

Hängt aber alles vom ersten Versuch mit popup ab

Gruß, Nobody