【 Set-Acl 】コマンドレット――ファイルのアクセス権を設定する(2)ファイルアクセス権の設定/追加/削除Windows PowerShell基本Tips(83)

本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。前回に続き、今回も「Set-Acl」コマンドレットを詳しく解説します。

» 2023年09月15日 05時00分 公開
[後藤諭史@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windows PowerShell基本Tips」のインデックス

連載目次

 本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。前回に続き、今回もコンピュータ上のファイルにアクセス権を設定する「Set-Acl」コマンドレットを解説します。今回は、Set-Aclコマンドレットによるファイルアクセス権の設定/追加/削除を扱います。なお、Set-Aclコマンドレットの基本的な使い方、オプションについては、本連載第82回をご覧ください。



新しいACLを設定する

 ファイルに対して新しいユーザーの「アクセス権」(Access Control List:ACL)を設定する場合は、「継承」の有無は問われません。こちらも基本形に基づき「取得」→「変更」→「適用」の3ステップで設定します(画面1)。

コマンドレット実行例

$ACL = Get-Acl .\Test_File10.txt
$identity = "woods"
$fileSystemRights = "FullControl"
$type = "Allow"
$Permission = ($identity,$fileSystemRights,$type)
$AddAccessList = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.SetAccessRule($AddAccessList)
Set-Acl -Path .\Test_File10.txt -AclObject $ACL


ALT 画面1 Set-Aclコマンドレットでユーザー「Woods」の権限を新規で設定した

 ACLは「SetAccessRule」メソッドで追加します。SetAccessRuleメソッドも引数の順序が固定されており、第1引数は「ユーザーもしくはグループ名」、第2引数は「アクセス権」、第3引数は「アクセスタイプ(許可/拒否)」となり、その順序でACLを指定します。

 SetAccessRuleメソッドはオブジェクト型になるので、「New-Object」コマンドレットで新しいオブジェクトを作成します。作成するオブジェクト名は「System.Security.AccessControl.FileSystemAccessRule」となり、オブジェクト作成の際の引数としてアクセス権を設定した変数(今回の場合は「$Permission」)を指定します。

 作成したオブジェクトの中身は以下のような形になります(画面2)。

ALT 画面2 作成したオブジェクトの中身


新しいACLを追加する

 SetAccessRuleメソッドは設定を上書きするため、例えば既存で「読み取り」の権限を持っているユーザー名を使用して「書き込み」の権限を設定した場合、読み取り権限が上書きされてしまい、書き込み権限だけになってしまいます(画面3)。

ALT 画面3 SetAccessRuleメソッドによって、ユーザー「Woods」の権限が上書きされてしまった

 既にACLを持っているユーザーに対して権限を追加する場合は、SetAccessRuleメソッドではなく、「AddAccessRule」メソッドを使用します(画面4)。

コマンドレット実行例

$ACL = Get-Acl .\Test_File10.txt
$identity = "woods"
$fileSystemRights = "Write"
$type = "Allow"
$Permission = ($identity,$fileSystemRights,$type)
$AddAccessList = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.AddAccessRule($AddAccessList)
Set-Acl -Path .\Test_File10.txt -AclObject $ACL


ALT 画面4 「AddAccessRule」メソッドを使用してユーザー「Woods」に書き込み権限を追加した


ACLを削除する

 ここまでACLの設定、追加を確認しました。当然、ACLを削除するシナリオもあり、その場合は「RemoveAccessRule」メソッドを使用します(画面5)。

コマンドレット実行例

$ACL = Get-Acl .\Test_File10.txt
$identity = "woods"
$fileSystemRights = "Write"
$type = "Allow"
$Permission = ($identity,$fileSystemRights,$type)
$RemoveAccessList = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.RemoveAccessRule($RemoveAccessList)
Set-Acl -Path .\Test_File10.txt -AclObject $ACL


ALT 画面5 「RemoveAccessRule」メソッドを使用してユーザー「Woods」の書き込み権限だけを削除した

 Set-Aclコマンドレットでは、ユーザーに設定された権限の一部だけではなく、権限を与えられたユーザーそのものを削除することも可能です。その場合は、ユーザーの設定を「Get-Acl」コマンドレットで抽出し、その結果をRemoveAccessRuleメソッドに渡します(画面6)。

コマンドレット実行例

$ACL = Get-Acl .\Test_File10.txt
$removeidentity = "SV01\woods"
$RemoveIDs = Get-Acl .\Test_File10.txt | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -eq $removeidentity}
$ACL.RemoveAccessRule($RemoveIDs)
Set-Acl -Path .\Test_File10.txt -AclObject $ACL


ALT 画面6 Set-Aclコマンドレットでユーザー「Woods」を削除した

筆者紹介

後藤 諭史(ごとう さとし)

Microsoft MVP for Cloud and Datacenter Management(2012-2024)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。