Benutzer mit den meisten Antworten
Foreach mit mehrern Variabeln

Frage
-
Hallo zusammen
ich habe wieder mal ein kleines Problem, bei dem ich nicht weiter komme.
Wie kann ich in einer forech Schlaufe 2 Variabeln einbinden. Bei folgendem Teil möchte ich das machen:
$directory = "Test" $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("UserGruppe", "Modify", $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory
mit dem Script setzte ich Berechtigungen auf ein Verzeichnis. Nun möchte ich mehrer unterschiedliche Berechtigungen setzen.die Werte "UserGruppe" und "Modify" würden sich dabei ändern. So weit ich weiss kann ich bei einer foreach Schlaufe nur eine Variable setzen. Wie mache ich es mit der anderen?
Am liebsten würde ich folgende Werte vorgeben:
$Admins = "Domain Admins", "FullControll"
$userrecht = $user, "Modify"
$guestrecht = "Gast", "Read" usw.
Ich wiederhole den Scriptteil ungern mehrfach, da ich auch nicht weiss, wieviele Berechtigungen gesetzt werden müssen.
Kann mir jemand einen Tipp geben.
Gruss Patric
- Bearbeitet twisters77 Donnerstag, 12. Januar 2012 10:00
Antworten
-
Aber um genau auf deine Frage zu Antworten, wie man einem foreach mehrere sachen übergibt.
Das geht am einfachsten so:
# folgendes geht nur mit strings (Text) $Array = "Willy;Löschen", "Klaus,Lesen", "Werner,Schreiben" foreach ($User in $Array) { $UserUndRecht = $User.split(";") Write-Host $UserUndRecht[0] " der Name des User, " $UserUndRecht[1] " das recht des User" } # oder besser so ! (geht auch mit Objekten): $Array = ("Willy","Löschen"), ("Klaus","Lesen"), ("Werner","Schreiben") foreach ($User in $Array) { Write-Host $User[0] " der Name des User, " $User[1] " das recht des User" }
Kauf dir am besten mal ein PowerShell BUCH !
Please click “Mark as Answer” on the post that helps you. Thank you ;-)) Bitte markiere hilfreiche Beiträge von mir als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". Das wäre Nett :-))
- Bearbeitet Peter Kriegel Donnerstag, 12. Januar 2012 12:52
- Als Antwort vorgeschlagen Peter Kriegel Dienstag, 17. Januar 2012 07:08
- Als Antwort markiert twisters77 Dienstag, 17. Januar 2012 12:49
Alle Antworten
-
In deinem Code ist kein foreach zu erkennen wo möchtest du es setzen?
Please click “Mark as Answer” on the post that helps you. Thank you ;-)) Bitte markiere hilfreiche Beiträge von mir als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". Das wäre Nett :-)) -
stimmt habe den falschen Code kopiert. bin aber zurzeit nicht vor dem richtigen Code. Er müsste so aussehen:
foreach ($users in $user) { $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("$users", "$permission", $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory }
$user wäre die Gruppe. nur wie bekomme ich die Variable $permission rein? -
Ich glaube,das wird so nich funktionieren!
Du must das vorher Gruppieren!
Wie soll das Script wissen welcher user welche rechte bekommen soll ?
Admins bekommen bestimmte rechte.
User bekommen bestimmte rechte und der Gast bekommt sein recht.
$Admins = "Klaus","Werner","Bernd" foreach ($Admin in $Admins) { $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($Admin, $AdminPermission, $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory } $Users = "Heike","Thomas","Willi" foreach ($User in $Users) { $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($Admin, $UserPermission, $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory } # der Gast ist nur einer also muss das auch nur einmal mit gast rechtenausgeführt werden (ohne schleife) $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("Gast", <Gastpermissions>, $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory
Man könnte das ganze auch mit Hashtables machen aber das bringt keinen vorteil!
Please click “Mark as Answer” on the post that helps you. Thank you ;-)) Bitte markiere hilfreiche Beiträge von mir als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". Das wäre Nett :-))
- Bearbeitet Peter Kriegel Donnerstag, 12. Januar 2012 12:16
-
Hallo,
ich würde sowas über an XML File lösen!
XML File:
<?xml version="1.0" encoding="utf-8"?> <x> <Berechtigung User="Administrator" Recht="FullControl" /> <Berechtigung User="User" Recht="Modify" /> <Berechtigung User="Gast" Recht="Read" /> </x>
Powershell Skript:
[XML]$xml = Get-Content "c:\Temp\test.xml" Foreach ( $var in $xml.x.Berechtigung ) { $directory = "C:\Temp\Test" $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($var.User, $var.Recht, $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory }
-
Aber um genau auf deine Frage zu Antworten, wie man einem foreach mehrere sachen übergibt.
Das geht am einfachsten so:
# folgendes geht nur mit strings (Text) $Array = "Willy;Löschen", "Klaus,Lesen", "Werner,Schreiben" foreach ($User in $Array) { $UserUndRecht = $User.split(";") Write-Host $UserUndRecht[0] " der Name des User, " $UserUndRecht[1] " das recht des User" } # oder besser so ! (geht auch mit Objekten): $Array = ("Willy","Löschen"), ("Klaus","Lesen"), ("Werner","Schreiben") foreach ($User in $Array) { Write-Host $User[0] " der Name des User, " $User[1] " das recht des User" }
Kauf dir am besten mal ein PowerShell BUCH !
Please click “Mark as Answer” on the post that helps you. Thank you ;-)) Bitte markiere hilfreiche Beiträge von mir als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". Das wäre Nett :-))
- Bearbeitet Peter Kriegel Donnerstag, 12. Januar 2012 12:52
- Als Antwort vorgeschlagen Peter Kriegel Dienstag, 17. Januar 2012 07:08
- Als Antwort markiert twisters77 Dienstag, 17. Januar 2012 12:49