tray-park
Goto Top

PowerShell - User -Ordner anlegen und Berechtigungen setzen

- Windows Server 2003 R2
- Windows 7 Pro

Hallo,

ich versuche gerade mir ein kleines Skript zu basteln, welches mir das Anlegen neuer User vereinfachen soll.

Im AD angelegt sind die User schon. Ich will nur die Homedirectories und die Berechtigung des Users auf den Ordner setzen.

Zuerst möchte ich es mal nur mit einem User versuchen. Einfach um das Verständnis bezüglich PowerShell und Zugriffsberechtigungen zu verinnerlichen.

Was ich bisher habe:

# Hier wird einfach nur der Ordner mit dem Usernamen angelegt
$NewUser = 'Max'  
$NewFolder = New-Item -Path "B:\$NewUser" -ItemType "directory"  

# Hier soll dann die Berechtigung vergeben werden
$acl = get-acl $NewUser
$ar = new-object system.security.accesscontrol.filesystemaccessrule($NewUser,'FullControl','Allow')  
$acl.SetAccessRule($ar)
set-acl $NewUser $acl

Das funktioniert mit der Außnahme, dass der User zwar gelistet wird, aber keine Zugriffsberechtigungen für ihn gesetzt werden.

Kann mir hier jemand unter die Arme greifen?

Freue mich über jede Antwort.

Liebe Grüße

Tray

Content-ID: 175605

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

Ausgedruckt am: 08.11.2024 um 07:11 Uhr

Logan000
Logan000 01.11.2011 um 15:15:41 Uhr
Goto Top
Moin moin

Der Code sieht ok aus.
Das einzige was mir so aus dem stand dazu einfällt:

Hat der User untrer dem das Skript ausgefürt wird Vollzugriff auf das neue Verzeichniss?

Gruß L.
bastla
bastla 01.11.2011 um 15:41:05 Uhr
Goto Top
@logan
Hat der User untrer dem das Skript ausgefürt wird Vollzugriff auf das neue Verzeichniss?
Wenn er das Verzeichnis erstellen konnte (und damit auch Besitzer ist) ...

Grüße
bastla
filippg
filippg 01.11.2011 um 16:00:57 Uhr
Goto Top
Hallo,

also manchmal leide ich ja unter akutem schielen & Denkfehlern. Aber ich würde sagen, du vergibst die Rechte nicht auf den Folder, sondern auf den User. $acl = get-acl $NewFolder könnte besser funktionieren.

Gruß

Filipp
tray-park
tray-park 01.11.2011 um 16:09:26 Uhr
Goto Top
Hallo in die Runde,

danke für die rasche Antwort.

Ich führe das Skript als lokaler Admin aus. Sollte also kein Berechtigungsproblem auf der Seite sein.

# Hier wird einfach nur der Ordner mit dem Usernamen angelegt
cd\
b:

$NewUser = 'max'  
#$NewFolder = New-Item -Path "B:\$NewUser" -ItemType "directory" 
$NewFolder ="B:\$NewUser"  

# Hier soll dann die Berechtigung vergeben werden
$acl = get-acl $NewFolder
$ar = new-object system.security.accesscontrol.filesystemaccessrule($NewUser,'FullControl','Allow')  
$acl.SetAccessRule($ar)
set-acl $NewUser $acl

Hab das nun umgeschrieben... Funktioniert aber leider auch nicht.

Was kann das nur sein?

Liebe Grüße

Tray
bastla
bastla 01.11.2011 um 16:12:33 Uhr
Goto Top
Hallo tray-park!

Und wenn Du in Zeile 13 auch "$NewFolder" verwendest?

Grüße
bastla
tray-park
tray-park 01.11.2011 um 16:22:36 Uhr
Goto Top
Hi Bastla,

gleiches Resultat face-sad

Grüße

Tray
filippg
filippg 01.11.2011 um 16:26:57 Uhr
Goto Top
Hallo,

dann würde ich dir raten, die Befehle mal nicht als Skript einzugeben, sondern einzeln in der PS einzutippen. Und nach jedem Schritt kannst du dir das Ergebnis anzeigen lassen. (also z.B. nach Zeile 7 "$newFolder | fl" und nach Z. 10 "$acl | fl"). Für gut möglich halte ich es z.B., dass er den User "marc" nicht auflösen kann (wobei er dann eine Fehlermeldung in Zeile 12 bringen müsste).

Gruß

Filipp
tray-park
tray-park 01.11.2011 um 16:28:39 Uhr
Goto Top
Hi,

die PowerShell müsste doch trotzdem Fehler ausgeben. Egal ich checks mal.

Ganz blöde Frage:

Kann das was mit dem Betriebssystem oder den ExecutionPolicy´s der PowerShell zu tun haben?

Grüße
tray-park
tray-park 01.11.2011 um 16:44:47 Uhr
Goto Top
Hi,

tatsächlich folgende Ausgabe:
$Acl.SetAccessRule($Ar) | fl
PS C:\Users\Max> $Acl.SetAccessRule($Ar) | fl
Method invocation failed because [System.Object[]] doesn't contain a method nam  
ed 'SetAccessRule'.  
At line:1 char:19
+ $Acl.SetAccessRule <<<< ($Ar) | fl
    + CategoryInfo          : InvalidOperation: (SetAccessRule:String) , Run
   timeException
    + FullyQualifiedErrorId : MethodNotFound

Set-Acl "B:\max" $Acl | fl
PS C:\Users\Max> Set-Acl "B:\max" $Acl | fl  
Set-Acl : Cannot convert 'System.Object' to the type 'System.Security.AccessC  
ontrol.ObjectSecurity' required by parameter 'AclObject'. Specified method is n  
ot supported.
At line:1 char:8
+ Set-Acl <<<<  "B:\max" $Acl | fl  
    + CategoryInfo          : InvalidArgument: (:) [Set-Acl], ParameterBinding
   Exception
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Comma
   nds.SetAclCommand

Methode und Argument nicht gefunden? Kann das was mit der Pipe zu tun haben?

Grüße
Logan000
Logan000 02.11.2011 um 14:01:48 Uhr
Goto Top
Moin moin

Wozu soll sa gut sein? Für eine Ausgabe?
$Acl.SetAccessRule($Ar) | fl
Da machst du besser so:
$Acl.SetAccessRule($Ar) 
Write $Acl |fl

Kann das was mit dem Betriebssystem oder den ExecutionPolicy´s der PowerShell zu tun haben?
Nein ich denke nicht.

Was dein Ursprungsskript angeht (ich hab das mal auf meine Bedürfnisse umgeschrieben):
# Hier wird einfach nur der Ordner mit dem Usernamen angelegt
$NewUser = 'Logan000'  
$path = "C:\_work\" + $NewUser  
$NewFolder = New-Item -Path $path -ItemType "directory"  

# Hier soll dann die Berechtigung vergeben werden
$acl = get-acl  $NewFolder 
#write-output $acl | fl   #nur zum testen
$ar = new-object system.security.accesscontrol.filesystemaccessrule($NewUser,"FullControl","Allow")  
#write-output $ar | fl #nur zum testen
$acl.SetAccessRule($ar)
set-acl $NewFolder $acl

Funktioniert ganz hervorragend. Die Rechte sind zwar etwas "dünn", aber mehr wird ohne Vererbung auch nicht gehen.

Achja Vererbung:
@ bastla
Zitat von @bastla:
@logan
> Hat der User unter dem das Skript ausgefürt wird Vollzugriff auf das neue Verzeichniss?
Wenn er das Verzeichnis erstellen konnte (und damit auch Besitzer ist) ...
.. hängen seine Rechte normaler weise von den darüber vererbten Rechten ab.

Gruß L.
bastla
bastla 02.11.2011 um 14:49:57 Uhr
Goto Top
@logan
hängen seine Rechte normaler weise von den darüber vererbten Rechten ab.
Soferne nicht "Schreiben" sein einziges Recht wäre, könnte er als Besitzer beliebige Rechte (auch für sich selbst) setzen ...

Grüße
bastla
tray-park
tray-park 02.11.2011 um 15:16:03 Uhr
Goto Top
Hi in die Runde,

$NewUser = 'max'  
$path = "B:\" + $NewUser  
$NewFolder = New-Item -Path $path -ItemType "directory"  

# Hier soll dann die Berechtigung vergeben werden
$acl = get-acl  $NewFolder 
#write-output $acl | fl   #nur zum testen
$ar = new-object system.security.accesscontrol.filesystemaccessrule($NewUser,"FullControl","Allow")  
#write-output $ar | fl #nur zum testen
$acl.SetAccessRule($ar)
set-acl $NewFolder $acl

Ich hab es mal so versucht, aber leider klappt das auch nicht. Meinst du mit "dünne Rechte", dass bei Spezialberechtigungen ein Häkchen gesetzt ist?

Liebe Grüße

Tray
Logan000
Logan000 02.11.2011 um 15:29:56 Uhr
Goto Top
Moin Moin

Meinst du mit "dünne Rechte", dass bei Spezialberechtigungen ein Häkchen gesetzt ist?
Ja genau. Wenn du via "Erweitert" nachschaust wirst du feststellen das dein User nur für diesen Ordner (nicht für Unterordner und Dateien ) Vollzugriff hat.

Das was Dir wahrscheinlich vorschwebt erreichst du nur wenn du die Vererbung berücksichtigst und die Rechte sowohl für Ordner als auch Dateien setzt.
z.B. so:
...
#write-output $acl | fl   #nur zum testen
$ar = new-object system.security.accesscontrol.filesystemaccessrule($NewUser,"FullControl","ObjectInherit","None","Allow")  
$acl.SetAccessRule($ar)
$ar2 = new-object system.security.accesscontrol.filesystemaccessrule($NewUser,"FullControl","ContainerInherit","None","Allow")  
$acl.AddAccessRule($ar2)
set-acl $NewFolder $acl

Hier noch ein helfender Hinweis zu den Parametern von filesystemaccessrule.

Gruß L.
tray-park
tray-park 07.11.2011 um 10:14:13 Uhr
Goto Top
Hi Logan000,

perfekt. Es hat funktioniert. Dankeschön.

Ich danke natürlich auch vielmals in die Runde.

Nun werd ich mal weiter basteln.

Liebe Grüße

Tray
Logan000
Logan000 08.11.2011 um 07:19:15 Uhr
Goto Top
Moin Moin

Bitteschön.
Sein doch so gut und setzte den Beitrag auf gelöst.
Danke.

Gruß L.