1

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

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

我究竟做错了什么?

4

1 回答 1

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。单独对字符串变量进行字符串插值是多余的。

于 2013-07-10T17:03:23.513 回答