powershell从数组创建文件夹和AD权限

时间:2013-07-10 15:30:36

标签: powershell security permissions

我有一个Active Directory OU,其中包含大量安全组(包含学生和教师用户名的课程部分) 我想通过powershell编写脚本,创建使用安全组名称命名的文件夹,然后将每个安全组的MODIFY权限分配给相应的文件夹。 这是我的剧本

#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权限。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您编写的方式, $ sec_groups 是一组格式化的表条目。添加规则时,您将尝试对表条目对象进行字符串插值,并将其用作组的名称。要使 $ sec_groups 包含各组名称的数组,请在第二行中将FT Name -HideTableHeaders更改为Select-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

但是,由于您在创建文件夹时所做的工作正在发挥作用(暗示 $ sec_group 本身在用作的参数时会干净地转换为字符串 - Childpath ),您可以在设置规则时摆脱 $ sec_group 周围的引号:

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

第一个是更好的习惯。

事实上,在任何一种情况下,您都不需要引用 $ sec_group 。单独对字符串变量进行字符串插值是多余的。

相关问题