コンテンツにスキップ

Powershellでフォルダ権限を操作する方法

index

doc

基本

  • Windowsのフォルダのアクセス権はACL(Access Control List)という
  • アクセス権の取得はGet-Aclコマンドを使用する
  • アクセス権の変更はSet-Aclコマンドを使用する
  • ACLのアクセスルールを消すにはDirectorySecurity(FileSecurity)クラスのRemoveAccessRuleメソッドを使用する

フォルダのアクセス権を操作する

アクセス権の確認

Get-Acl \\mvdfshq1\Shared\MVD-Project\AIDC\YaYoi | Format-Table -Wrap * Get-Aclでフォルダを指定してあげると割り当てられている権限がすべて出てくる
* ...で省略されないようにFormat-Table -Wrapコマンドを追加

アクセス権の削除

(Get-Acl "C:\Path\To\Your\Folder").Access

# Pathの設定
$path = '\\mvdfshq1\Shared\MVD-Project\平田機工\平田機工様_セーフティユニット開発'
$path = '\\mvdfshq1\Shared\MVD-Project\平田機工'
$path = '\\mvdfshq1\Shared'

# 1. 現在のアクセス制御リスト (ACL) を取得
$acl = Get-Acl $path

$acl.Access

# 2. 継承を無効にする
$acl.SetAccessRuleProtection($true, $false)
$acl.SetAccessRuleProtection($false, $true)
$acl.SetAccessRuleProtection($true, $true)

# 2. 特定のSIDを持つACEを検索
$targetSID = 'S-1-5-21-3203922931-1826102660-3435358224-2148'
$acesToRemove = $acl.Access | Where-Object { $_.IdentityReference -eq $targetSID }

# 3. 不要なACEを削除
foreach ($ace in $acesToRemove) {
    $acl.RemoveAccessRule($ace)
}

# 4. 変更を適用
Set-Acl $path $acl