質問者
ファイルやフォルダーの所有者によってGet-AclとSet-Aclでアクセス権のコピーができない。

質問
-
ファイルやフォルダーのアクセス権、監査設定、所有者を別のファイルやフォルダーにコピーしたくて
>Set-Acl -Path 'dst' -AclObject ( Get-Acl -Path 'src' -Audit )
とした場合、srcの所有者がSYSTEMやTrustedInstallerなどの場合には動作せず、「セキュリティ識別子をこのオブジェクトのオーナーにすることはできません。」というエラーが出てしまいます。所有者が現在のユーザーやAdministratorsの場合はうまく動作します。
ファイルやフォルダーのアクセス権などのみをコピーしなければならない場面が多く非常に困っています。
環境はWindows 7 SP1 (32bit)のPowerShellです。
すべての返信
-
所有者をTrustedInstaller等に設定する際は管理者権限が必要になります。
スクリプトを管理者権限で実行してみてはいかがでしょうか。
もし、「管理者権限は得ることができないが、所有者以外のアクセス権のみコピーしたい」という場合であれば、以下のような方法で可能だと思います。
$src=".\src" $dst=".\dst" $acl = Get-Acl -Path $src $dstUser = (Get-Acl -Path $dst).GetOwner([System.Security.Principal.NTAccount]) $acl.SetOwner($dstUser) Set-Acl -AclObject $acl -Path $dst
- 編集済み 牟田口大介Moderator 2018年6月8日 6:17 コード一部修正
-
回答ありがとうございます。
管理者権限で、
>Set-Acl -Path 'dst' -AclObject ( Get-Acl -Path 'src' -Audit )
としてもやはり同じエラーが出ます。ちゃんとビルトインのAdministratorアカウントの元で、しかもコントロールパネルのユーザーアカウント制御の設定のスライダーを一番下にしてもです。srcの所有者が現在のユーザー(管理者)とAdministrators以外の、制限ユーザーを含めた全てのユーザーで起こるみたいです。
紹介してもらった方法を応用してアクセス権と監査設定のみコピーできても、所有者のコピーはicacls.exeなどを使って煩雑な操作をしなければならないみたいです。
当方はWindows 7 SP1のPowerShellをアップデートは一切せず使ってますが、貴方の環境ではエラーは出るのでしょうか?
-
当方環境はWindows10+PowerShell5.1ですが、srcの所有者がSYSTEMやTrustedInstallerなどの場合には「セキュリティ識別子をこのオブジェクトのオーナーにすることはできません。」というエラーが出ますが、管理者権限で実行すると出ませんね。OSもしくはPowerShellのバージョンによって挙動が違うということは考えられます。
ダメ元ですが、以下のように所有者以外のアクセス権のみ先にコピーして、後で所有者をコピーするという二段構えにしてみるとどうでしょうか? 要管理者権限です。
$src=".\src" $dst=".\dst" $acl = Get-Acl -Path $src $srcUser = $acl.GetOwner([System.Security.Principal.NTAccount]) $dstUser = (Get-Acl -Path $dst).GetOwner([System.Security.Principal.NTAccount]) $acl.SetOwner($dstUser) Set-Acl -AclObject $acl -Path $dst $acl = Get-Acl -Path $dst $acl.SetOwner($srcUser) Set-Acl -AclObject $acl -Path $dst