記事カテゴリ

ユーザー機能


 2024年3月29日(金) 06:41 JST

[PowerShell] Windows7でのNTFSアクセス権の設定方法

  • 投稿者:
  • 表示回数
    10,607

先日から困っていたこと、気づいたら非常に簡単だったこと。

Windows XP迄使えていたNTFSアクセス権の設定コマンド「cacls」はWindows Vista以降では使用できなくなったようです。代わりに「icacls」というコマンドが用意されているようです。

早速このコマンドを利用しようと試みると...
(下記のコマンドはc:\windows\win.ini にUsersグループがアクセスできるように権限を付与します。)

C:\Users\Jun>icacls c:\windows\win.ini /grant Users:M
c:\windows\win.ini: アクセスが拒否されました。
0 個のファイルが正常に処理されました。1 個のファイルを処理できませんでした

と返されます。管理者なのにアクセスが拒否されるのは何でなのかな?とtechnetを探していると、よく似たWindows 2003 Server sp2での事例が引っかかったので、この問題がWindows7でもまだ発生しているのか?このときにリリースされているヴァージョンよりもWindows7についているバージョンの方が新しいから適用されているのでは?と悩んでいました。

ですが、本日自宅で同じ事を試みて...

C:\windows\system32>icacls c:\windows\win.ini /grant Users:M
処理ファイル: c:\windows\win.ini
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

と返ってくることに気づきました。
何か応答メッセージに引っかかるところがありますが、実際にエクスプローラで確認すると、正常にコマンドが実行できていることが確認出来ました。
では、何がちがうのか?と言うと
どちらも管理者でログインしているのですが、UAC特有の昇格を行っていなかったからのようです。
でも、確か会社のPCはUAC OFFに設定してもらってたはず何ですがΣ(>_<;)

さらに、PowerShell 2.0でも実行してみました。

Usersグループにc:\windows\win.ini対してフルコントロールのNTFSアクセス権を付与する場合

$aclparam = @("Users", "Fullcontrol", "Allow")
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $aclparam
$acl = Get-Acl c:\windows\win.ini
$acl.AddAccessRule($rule)
Set-Acl c:\windows\win.ini -AclObject $acl

Usersグループにc:\windows\win.ini対して変更のNTFSアクセス権を付与する場合

$aclparam = @("Users", "Modify", "Allow")
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule  $aclparam
$acl = Get-Acl c:\windows\win.ini
$acl.AddAccessRule($rule)
Set-Acl c:\windows\win.ini -AclObject $acl

※PowerShellを利用する場合でも、UACの昇格は忘れずに行ってください。

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/ProgFAQ-PS_Set-Acl

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。