2013-07-10 64 views
1

我有一個包含大量安全組的Active Directory OU 我想通過PowerShell創建腳本來創建名爲using的文件夾安全組名稱然後將每個安全組的MODIFY權限分配給相應的文件夾。 這裏是我的腳本powershell創建文件夾和AD陣列的權限

#get all security groups 
$sec_groups = Get-ADObject -SearchBase "ou=class,ou=Groups,ou=Colleague,dc=school,dc=edu" -LDAPFilter "(name=13_su*)" -ResultSetSize 10 | FT Name -HideTableHeaders 

ForEach ($sec_group in $sec_groups) 
{ 
#create folder for each security group 
$newPath = Join-Path -Path "\\server\classes" -childpath $sec_group 
New-Item $newPath -type directory 

#set permission for each folder 
$acl = Get-Acl $newpath 
$acl.SetAccessRuleProtection($True, $False) 
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("labadmins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") 
$acl.AddAccessRule($rule) 
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$sec_group","Modify", "ContainerInherit, ObjectInherit", "None", "Allow") 
$acl.AddAccessRule($rule) 

Set-Acl $newPath $acl 
} 

它成功爲每個安全組創建一個文件夾,但不能設置$sec_group權限。

我在做什麼錯?

回答

0

您編寫它的方式,$ sec_groups是格式化表條目的數組。當您添加規則時,您正嘗試對錶條目對象進行字符串內插並將其用作組的名稱。爲了使$ sec_groups組的名稱數組,改變FT Name -HideTableHeadersSelect-Object -ExpandProperty Name在第二行:

$sec_groups = Get-ADObject -SearchBase "ou=class,ou=Groups,ou=Colleague,dc=school,dc=edu" -LDAPFilter "(name=13_su*)" -ResultSetSize 10 | Select-Object -ExpandProperty Name 

但是,因爲你在做什麼創建的文件夾在工作(這意味着$作爲參數來-Childpath當sec_group自身不乾淨轉換爲字符串),你也許可以只擺脫引號的周圍脫身$ sec_group設置規則時:

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($sec_group,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow") 

儘管如此,第一個習慣是更好的習慣。

事實上,在任何情況下,您都不需要引用$ sec_group。自行串入字符串變量是多餘的。

+0

謝謝阿迪,我會盡力並讓你知道 – user2569150

+0

如果有效,請點擊左邊的複選標記以接受答案。我超過99%肯定會。您修改權限的語法是正確的,我看到的唯一問題是「$ sec_group」不計算組的名稱。 –

+0

我收到此錯誤 AddAccessRule:使用「1」參數調用「AddAccessRule」的異常:「部分或全部標識引用無法轉換。」 + $ acl.AddAccessRule <<<<($規則) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException – user2569150