1

多数のセキュリティ グループ (学生と教師のユーザー名を含むコース セクション) を含む Active Directory OU があります。セキュリティ グループ名を使用して名前を付けたフォルダーを作成し、各セキュリティ グループに MODIFY 権限を割り当てる 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をグループ名の配列にするには、2 行目を次のように変更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 に答える