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

  • 質問

  • ファイルやフォルダーのアクセス権、監査設定、所有者を別のファイルやフォルダーにコピーしたくて

    >Set-Acl -Path 'dst' -AclObject ( Get-Acl -Path 'src' -Audit )

    とした場合、srcの所有者がSYSTEMやTrustedInstallerなどの場合には動作せず、「セキュリティ識別子をこのオブジェクトのオーナーにすることはできません。」というエラーが出てしまいます。所有者が現在のユーザーやAdministratorsの場合はうまく動作します。

    ファイルやフォルダーのアクセス権などのみをコピーしなければならない場面が多く非常に困っています。

    環境はWindows 7 SP1 (32bit)のPowerShellです。

    2018年6月7日 9:22

すべての返信

  • 所有者を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


    2018年6月7日 17:24
    モデレータ
  • 回答ありがとうございます。

    管理者権限で、

    >Set-Acl -Path 'dst' -AclObject ( Get-Acl -Path 'src' -Audit )

    としてもやはり同じエラーが出ます。ちゃんとビルトインのAdministratorアカウントの元で、しかもコントロールパネルのユーザーアカウント制御の設定のスライダーを一番下にしてもです。srcの所有者が現在のユーザー(管理者)とAdministrators以外の、制限ユーザーを含めた全てのユーザーで起こるみたいです。

    紹介してもらった方法を応用してアクセス権と監査設定のみコピーできても、所有者のコピーはicacls.exeなどを使って煩雑な操作をしなければならないみたいです。

    当方はWindows 7 SP1のPowerShellをアップデートは一切せず使ってますが、貴方の環境ではエラーは出るのでしょうか?

    2018年6月8日 12:03
  • 当方環境は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

    2018年6月8日 17:31
    モデレータ
  • 試してみましたがやはりダメでした。一番最後の

    >Set-Acl -AclObject $acl -Path $dst

    のところで同じエラーが出ます。

    またこの方法ではsrcに管理者でもアクセス権を変更できない設定にしてあると、最後の行で「許可されていない操作を実行しようとしました。」とエラーが出ます。やはりアクセス権と所有者は同時にコピーしないといけないみたいです。

    2018年6月9日 2:25