コマンドレットを使用してすべてのフォルダーを反復処理し、Get-ChildItem
各 ACL を調べて、必要に応じてアクセス許可を追加できますが、一部の部分については .Net クラスとメソッドにドロップダウンする必要があります。
直接の親ディレクトリに ACL を設定し、(サブフォルダーではなく) ファイルを継承できると仮定すると、次のようにすることができます。
$identity = "NT AUTHORITY\SYSTEM"
$basePath = "U:\"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $identity,"FullControl","ObjectInherit","None","Allow"
foreach($folder in Get-ChildItem -Path $basePath -Recurse -Directory)
{
$acl = $folder.GetAccessControl("Access")
if(!($acl.Access | ? { $_.IdentityReference -eq $identity -and $_.FileSystemRights -eq "FullControl" }))
{
$acl.AddAccessRule($accessRule)
$folder.SetAccessControl($acl)
}
}
ルール$accessRule
は、この設定をフォルダーとすべての直下の子ファイルに適用することを示しています。作成に使用される継承フラグに関する情報については、このスタックオーバーフローの質問を参照してください$accessRule
各ファイルを個別に設定する必要がある場合 (これに対処する必要がないことを心から願っています)、上記を少し変更できます。
$identity = "NT AUTHORITY\dd"
$basePath = "U:\"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $identity,"FullControl","None","None","Allow"
foreach($folder in Get-ChildItem -Path $basePath -Recurse)
{
$acl = $folder.GetAccessControl("Access")
if(!($acl.Access | ? { $_.IdentityReference -eq $identity -and $_.FileSystemRights -eq "FullControl" }))
{
$acl.AddAccessRule($accessRule)
$folder.SetAccessControl($acl)
}
}