koluschkib
Goto Top

Ordnerberechtigungen VBS CMD

Morgen Adminfreunde

hab ne frage zu meinem unten aufgeführten Script,

es ist eins script was User und Gruppen im AD anlegt, dazu erstellt er Benutzerdefinierte Ordner, die im Netzwerk freigegeben werden.

Nun zu meinem Problem was ich habe
Das Script läuft fehlerfrei durch ohne zu mucken, doch es scheitert an der Berechtigung für den Zugriff auf den Benutzerordner.

Der Administrator soll vollzugriff haben, gut kein Problem wird gesetzt.
Der Benutzer der diesesn Ordner nutzt soll Vollzugriff auf diesem Ordner haben.

Leider klappt es nicht so ganz, mit der Berechtigung für den Benutzer. In den Eigenschaften des Ordners nach dem er erstellt worden ist kann man einsehen wer was kann.

Administrator (TESTAD/ADMINSTRATOR) = Vollzugriff
Benutzer (TESTAD/BENUTZER) = Vollzugriff

dabei sollte es so aussehen (Der Benutzer Hans Maulwurf soll Zugriff haben, nicht Benutzer)

Administrator (TESTAD/ADMINSTRATOR) = Vollzugriff
Hans Maulwurf (HanMa@testAD.int) = Vollzugriff

Manuell kann man es problemlos eintragen, der Name wird aufgelöst und Angezeigt und man kann ihn wählen

Option Explicit

Dim OU, objDomain, objOU, objUser, objGroup, WsHShell, CMD
Dim fso, f, Zeile, Feld, Vorname, Nachname, Abteilung, i, Passwort, Abfall
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1

OU = "cn=users,dc=testad,dc=int"  
Set objOU = GetObject("LDAP://" & OU)  

Dim File_Share
File_Share = 0
Dim MAXIMUM_CONNECTIONS
MAXIMUM_CONNECTIONS = 25

strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set objNewShare = objWMIService.Get("Win32_Share")  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set f = fso.OpenTextFile("c:\user.csv",1,0)  

Abfall = f.Readline   ' also die 1. Zeile    
Do while not f.AtEndOfStream       'statt AtEndOfLine  

Zeile = f.readLine 
Feld = split(Zeile,";")  
Vorname = Feld(0)
Nachname = Feld(1)
Abteilung = Feld(2)
'        Gruppen werden in Schleife direkt angesprochen  
'        Gruppe1 = Feld(3)  
'        Gruppe2 = Feld(4)  
'        Gruppe3 = Feld(5)  
'        Gruppe4 = Feld(6)  
'        Gruppe5 = Feld(7)  


Passwort = left(Vorname,3)&left(Nachname,2)&"1234%"  
Passwort = LCase(passwort)

Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname)  
objUser.Put "sAMAccountName", Nachname  
objUser.Put "displayName", Vorname & " " & Nachname  
objUser.Put "givenName", Vorname  
objUser.Put "sn", Nachname  
objUser.Put "description", Abteilung  
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int"  
objUser.SetInfo
objUser.SetPassword Passwort
objUser.Put "userAccountControl", 544  
objUser.Put "pwdLastSet", 0  
objUser.SetInfo

For i = 3 To 7 'alle Gruppen bearbeiten  
If Feld(i) <> "" Then  
If GroupExists(Feld(i), objOU) Then
Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU)  
Else
Set objGroup = objOU.Create("Group", "cn=" & Feld(i))  
objGroup.Put "sAMAccountName", Feld(i)  
objGroup.SetInfo
End If
objGroup.Add objUser.ADSPath
End If
Next

'Ordner werden für denn Benutzer angelegt, dabei wird der Nachname als Ordnername verwendet  
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname)  
errReturn = objNewShare.Create _
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _  
    MAXIMUM_CONNECTIONS, "Benutzerordner")  

Set WshShell = WScript.CreateObject("WScript.Shell")     

PermL1 = "Administratoren:F " & "left(Vorname,3) & left(nachname,2) & @testAD.int" & ":C"  
CMD = "cmd /c echo j|cacls \\" & "C:\Freigaben\" &Nachname & " /G " & PermL1 & " && "  
WshShell.Run CMD, 0, 1
Loop

Function GroupExists(Group, OU)
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen  
OU.Filter = Array("group")  
'Default: Gruppe noch nicht vorhanden  
GroupExists = False
'Alle in der OU enthaltenen Gruppen durchgehen  
For Each objGroup in OU
    'klein geschriebenen Gruppennamen der betrachteten Gruppe  
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen  
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then
        'bei Übereinstimmung gibt es die Gruppe bereits ...  
        GroupExists = True
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden  
        Exit For
    End If
Next
End Function

Irgendwo in der Zeile 76 muss der Fehler stecken. Ich versuche dabei eine Variable aus VBS in einen CMD befehl zu übernehmen. Meine vermutung ist, dass dort der fehler steckt

Nach dem der User im AD angelegt worden ist, kann man Manuell die Berechtigungen aus einer CMD problemlos setzen

cacls c:\freigabe\Maulwurf /P Maulwurf:F Administrator:F

Die Berechtigungen kann man in denn Eigenschaften einsehen und alles klappt. nur eben nicht aus dem VBScript raus

hat einer von euch nen Tipp oder kann mir sagen wo der Fehler ist?

gruß und Danke

KoluschkiB

Content-ID: 143734

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

Ausgedruckt am: 15.11.2024 um 15:11 Uhr

TsukiSan
TsukiSan 28.05.2010 um 11:55:49 Uhr
Goto Top
Hallo KoluschkiB
versuche mal die Zeile 76
PermL1 = "Administratoren:F " & "left(Vorname,3) & left(nachname,2) & @testAD.int" & ":C"  
umzuändern in
PermL1 = "Administratoren:F " &  left(Vorname,3) & left(nachname,2) & "@testAD.int" & ":C"  

Gruss
Tsuki
koluschkiB
koluschkiB 28.05.2010 um 12:04:57 Uhr
Goto Top
Hey Tsuki

habs mal versucht, klappt leide rnicht. Die Einträge bleiben weiterhin so wie vorhin.
Hab auch mal geschaut, ob das Script icht evtl. die Berechtigungen für die Freigabe machen, aber dort ist Admin und Jeder eingetragen.

hab die Zeile auch noch umgebastelt um zu schauen, obs vielleicht anders klappt

PermL1 = "Administratoren:F " & Nachname &":C"  

also so gebastelt, dass er nur den Nachnamen verwendet. Wie man es zb Manuell in der CMD macht. brachte aber leider keinen Erfolg mit sich

gruß

koluschkiB
koluschkiB
koluschkiB 28.05.2010 um 12:40:09 Uhr
Goto Top
Kann mir jemand sagen wie das mit "Net SHare" ausschaut?

kann sein, dass ich das verwenden muss?
da ja der Ordne rim Netzwerk freigegeben wird

gruß und danke

koluschkiB
bastla
bastla 28.05.2010 um 14:18:05 Uhr
Goto Top
Hallo koluschkiB!

"net share" wäre zum Erstellen von Freigaben zu verwenden ...
Versuch es mit folgenden Zeilen:
PermL1 = "Administratoren:F " & Nachname & ":C" 
CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1
Grüße
bastla
koluschkiB
koluschkiB 28.05.2010 um 14:51:49 Uhr
Goto Top
Hey Bastla face-smile

kannst es sicherlich schon an meinem Grinsen erkennen face-smile
Es hat geklappt. ersetzt die Berechtigungen richtig.
Hab gedacht, dass der Fehler in der 1. Zeile ist, dabei musste ich eben beim vergleichen feststellen das es nicht so war
wenn ich das richtig erkannt habe lag es wohl nur an diesen zeichen in meinem script "\\" &"
Kleine Zeichen, große Wirkung face-wink

Gruß und Danke für die Hilfe

KoluschkiB
koluschkiB
koluschkiB 28.05.2010 um 15:06:21 Uhr
Goto Top
Hey Bastla,

ich hab da was gesehen, was ich mir selbst nicht erklären kann.

Ich nutze nen Win Server 2008, ich hab einen Ordner Manuell erstenne C:\freigaben. wenn ich in die EIgenschaften des Ordners gehe unter Registerkarte Freigabe
dort sind zwei schaltflächen 1. "Freigabe" und 2. "Erweiterte Freigabe", alles so weit ok.

Wenn ich aber mein Script ausführe, legt es in dem Ordner C:\freigaben die benutzer ordner an. Gehe ich dort in Die Eigenschaften Registerkarte Freigabe, ist die 1. Schlatfläche "Freigabe" nicht aktiviert, sozusagen. nur die 2. Erweiterete...

also ich vorhin bisschen rumgespeilt habe und geschaut habe, gingen beide problemlos. habs ja selbst gesehen.
hast du vielleicht ne erklärung dafür?

ansich ist es ja egal, der Ordner ist so oder so Freigegeben, abe rich kann es mir mit dieserSchaltfläche nicht erklären

danke und gruß

koluschkiB