PowerShell を使用してフォルダーにアクセス許可を再帰的に設定する
ACL (アクセス制御リスト) は、ファイルまたはリソースにアクセスするためのユーザーの許可とユーザー グループを表します。 これは、アクセス制御エントリ (ACE) の順序付きリストです。
ACL の各 ACE は、許可、拒否、または監査されるアクセス権を定義します。 オブジェクトのセキュリティ記述子には、DACL と SACL の 2 種類の ACL を含めることができます。
Windows で NTFS アクセス許可を使用する場合、フォルダーのアクセス許可を再帰的に変更しなければならない場合があります。 GUI は、PowerShell スクリプトよりも時間がかかり、複雑になります。
このチュートリアルでは、PowerShell を使用してフォルダーにアクセス許可を再帰的に設定する方法を説明します。
PowerShell を使用してフォルダーのアクセス許可を再帰的に取得する
PowerShell で ACL 権限を管理するための主なコマンドレットは、Get-Acl
と Set-Acl
の 2つです。
Get-Acl
コマンドレットは、ファイルまたはリソースのアクセス制御リスト (ACL) を含むセキュリティ記述子を取得します。
Get-Acl
は、C:\New
ディレクトリのセキュリティ記述子を取得します。
Get-Acl C:\New
出力:
Directory: C:\
Path Owner Access
---- ----- ------
New DelftStack\rhntm BUILTIN\Administrators Allow FullControl...
Get-Acl
コマンドレットは、すべてのディレクトリとサブディレクトリのアクセス許可を返すわけではありません。 フォルダーのアクセス許可を再帰的に取得するには、-Recurse
パラメーターを指定して Get-ChildItem
コマンドレットを使用する必要があります。
Get-ChildItem "C:\pc" -Recurse | Get-ACL
PowerShell を使用してフォルダーに再帰的にアクセス許可を設定する
Set-Acl
は、ファイルまたはリソースのセキュリティ記述子を変更します。 -AclObject
パラメータの値として指定されたセキュリティ記述子を適用します。
次のコマンドは、C:\New
ディレクトリのセキュリティ記述子から C:\pc
ディレクトリのセキュリティ記述子に値をコピーします。
$new = Get-Acl -Path "C:\New"
Set-Acl -Path "C:\pc" -AclObject $new
最初のコマンドは、C:\New
ディレクトリのセキュリティ記述子を取得し、$new
変数に格納します。 2 番目のコマンドで、Set-Acl
は C:\New
ディレクトリの ACL の値を $new
の値に変更します。
次のスクリプトは、フォルダーの既存のアクセス許可に新しい ACL 規則を再帰的に追加します。
$acl = Get-Acl -Path "C:\pc"
$ace = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("testuser", "Read", "Allow")
$acl.AddAccessRule($ace)
Set-Acl -Path "C:\pc" -AclObject $acl
最初のコマンドは、既存の ACL ルールを取得します。 2 番目のコマンドは、適用する新しい FileSystemAccessRule
を作成します。
3 番目のコマンドは、フォルダーの既存のアクセス許可に新しい ACL 規則を追加します。 4 番目のコマンドは、Set-Acl
を使用して、新しい ACL をフォルダーに適用します。
次のコマンドを使用して、すべてのユーザーの権限を表示できます。
(Get-ACL -Path "C:\pc").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType
出力:
IdentityReference FileSystemRights AccessControlType
----------------- ---------------- -----------------
DelftStack\rhntm FullControl Allow
DelftStack\testuser Read, Synchronize Allow
システム管理者は、スクリプトを使用して多くのフォルダーとファイルの NTFS アクセス許可を構成し、プロセスをより迅速かつ簡単にします。 この記事が、PowerShell を使用してフォルダーに再帰的にアクセス許可を設定する方法を理解するのに役立つことを願っています。
PowerShell の詳細な NTFS アクセス許可の種類については、この投稿 を参照してください。