みなさん、こんにちは。
Windows OS にて、GUI 上の操作から、特定のフォルダーにアクセス権をしたい時、
同じような設定を他にある多数のフォルダーや他ユーザーに対しても行いたい...という思いはございませんでしょうか。
今回は、GUI 上で設定した値を PowerShell で確認し、設定を行うコマンドについて参考までに紹介します。
#早く結果が知りたい人へ
$変数A = Get-Acl<アクセス権の変更を行うパス> -Audit
$変数B= New-Object System.Security.AccessControl.FileSystemAccessRule(< <アクセス権を付与するユーザー名>, <付与するアクセス権>, "ContainerInherit, ObjectInherit", "None", <許可の設定または拒否の設定>)
$変数A.AddAccessRule($変数B)
Set-Acl <アクセス権の変更を行うパス> -AclObject $変数A
#解説が知りたい人へ
今回は、デスクトップ環境上に、GUI でアクセス権を設定するフォルダーを以下の様に作成します。
階層 : C:\ACLfromGUI\ACLfromGUI_001
そして、上記で設定したアクセス権を以下の階層にも同じアクセス権を設定したいとします。
階層 : C:\ACLfromCUI\ACLfromCUI_001
GUI と CUI 部分の名前が違います。
上記の GUI で設定したいアクセス権を、 PowerShell 上から確認すると以下の様になります。
Get-Acl "C:\ACLfromGUI\ACLfromGUI_001" -Audit | Format-Table -AutoSize -Wrap
Path Owner Access
---- ----- ------
ACLfromGUI_001 BUILTIN\Administrators DESKTOP-35D38NA\ACL_TEST_User Allow Read, Synchronize
BUILTIN\Administrators Allow FullControl
NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Users Allow ReadAndExecute, Synchronize
NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
NT AUTHORITY\Authenticated Users Allow -536805376
ACL_TEST_User には、Read, Synchronize が Allow で付いていますね。
後は、このアクセス権限を Set-ACL でつけてあげます。
流れとしては以下のような感じです。
- アクセス権を設定したい対象フォルダ―の現在の ACL の設定を取得し、変数 ( GENZAI ) に格納する
- 追加付与したい ACL の設定を他変数 ( KOREKARA ) に格納する。
- Set-ACL コマンドで設定する。
よって、以下のコマンドの流れになります。
現在の、C:\ACLfromCUI\ACLfromCUI_001 フォルダーの ACL の設定を監査設定を含めて取得し、GENZAI に格納
$GENZAI = Get-Acl "C:\ACLfromCUI\ACLfromCUI_001" -Audit
GENZAI 変数に格納されている ACL に KOREKARA 変数に入っている ACL の設定内容を格納
$GENZAI.AddAccessRule($KOREKARA)
KOREKARA の変数に追加付与したい ACL の設定を格納
$KOREKARA = New-Object System.Security.AccessControl.FileSystemAccessRule("DESKTOP-35D38NA\ACL_TEST_User", "Read, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
$GENZAI.AddAccessRule($KOREKARA)
注意 : 上記の ACL の "Read , Synchronize" の権限設定は GUI から設定した内容を PowerShell で表示し、把握した。
Set-ACL でアクセス権を付与したい先 ( C:\ACLfromCUI\ACLfromCUI_001 ) に GENZAI に格納したアクセス権を追加
Set-Acl “C:\ACLfromCUI\ACLfromCUI_001” -AclObject $GENZAI
さあ、GUI で設定した内容と CUI で設定した内容を比較してみましょう。
よって、もし読者の皆様がお使いになる際は、それぞれ以下の様に値を書き直すと良いと思います。
$GENZAI = Get-Acl <アクセス権付与したいフォルダーのパス> -Audit
$KOREKARA = New-Object System.Security.AccessControl.FileSystemAccessRule(<アクセス権付与の対象ユーザー名>, <付与するアクセス権の内容>, "ContainerInherit, ObjectInherit", "None", <許可 or 拒否>)
$GENZAI.AddAccessRule($KOREKARA)
Set-Acl <アクセス権付与したいフォルダーのパス> -AclObject $GENZAI
今回使用した cmdlet などは以下の公開情報をご参考下さい。
Set-ACL について
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-acl?view=powershell-7.2
Get-ACL について
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-acl?view=powershell-7.2
FileSystemSecurity.RemoveAccessRule(FileSystemAccessRule) メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.security.accesscontrol.filesystemsecurity.removeaccessrule?view=net-6.0