2

ACL オブジェクトを取得して を置き換え、Access.IdentityReference.Value残りのオブジェクトをそのまま維持して、Set-Aclを別のシステムに適用できるようにする必要があります。

$acl = Get-Acl -Path "C:\Temp"
$h = New-Object -TypeName PSObject
ForEach-Object -InputObject $acl -Process {
    if ($_.Access.IdentityReference.Value -contains "BUILTIN\Users") {
        "found"
        $h += @($_.Access.IdentityReference.Value.Replace("BUILTIN\Users", "new\name"))
    } else {
        $h += @($_)
    }
}
$h.Access

これを行うには非常に多くの方法がありますが、ターゲット値を見つけて置き換えることで、元のオブジェクトの残りを失うことができました。


編集:このコードを試すと:

$acl = Get-Acl -Path 'C:\Temp'

$ace = $acl.Access | Where-Object { $_.IdentityReference -eq 'BUILTIN\Users' }
$newAce = New-Object System.Security.AccessControl.FileSystemAccessRule (
    'new\name',
    $ace.FileSystemRights,
    $ace.InheritanceFlags,
    $ace.PropagationFlags,
    $ace.AccessControlType
)
$acl.RemoveAccessRule($ace)
$acl.AddAccessRule($newAce)

Set-Acl -Path 'C:\Temp' -AclObject $acl

次のエラーが表示されます。

"1" 個の引数を指定して "AddAccessRule" を呼び出し中に例外が発生しました: "一部またはすべての ID
参照を翻訳できませんでした。」
行:12 文字:1
+ $acl.AddAccessRule($newAce)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo : NotSpecified: (:) []、MethodInvocationException
     + FullyQualifiedErrorId : IdentityNotMappedException

Edit2:新しいスクリプトですが、まだ完成していません:

$Ssid = "S-1-5-21-2214593661-3374179426-1523454523-1133"
$Tsid = "S-1-5-21-2227185791-3254421074-497073356-1005"
$Spath = "\\clw01\dept\CLW_Site"
$Tpath = "\\clw03\dept\CLW_Site"

$acl = Get-Acl -Path $Spath

$ace = $acl.Access | Where-Object { $_.IdentityReference -eq $Ssid }
$newAce = New-Object System.Security.AccessControl.FileSystemAccessRule (
    $Tsid,
    $ace.FileSystemRights,
    $ace.InheritanceFlags,
    $ace.PropagationFlags,
    $ace.AccessControlType
)
$acl.RemoveAccessRule($ace)
$acl.AddAccessRule($newAce)

Set-Acl -Path $Tpath -AclObject $acl

次のエラーが表示されます。

"1" 個の引数を指定して "AddAccessRule" を呼び出し中に例外が発生しました: "信頼関係
プライマリ ドメインと信頼されたドメインの間の接続に失敗しました。」
行:9 文字:1
+ $acl.AddAccessRule($newAce)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) []、MethodInvocationException
    + FullyQualifiedErrorId : SystemException
4

1 に答える 1

1

既存の ACE の ID 参照を置き換えることはできません。ACE 全体を新しいものに置き換える必要があります。

$acl = Get-Acl -Path 'C:\Temp'

$ace = $acl.Access | Where-Object { $_.IdentityReference -eq 'BUILTIN\Users' }
$newAce = New-Object System.Security.AccessControl.FileSystemAccessRule (
    'new\name',
    $ace.FileSystemRights,
    $ace.InheritanceFlags,
    $ace.PropagationFlags,
    $ace.AccessControlType
)
$acl.RemoveAccessRule($ace)
$acl.AddAccessRule($newAce)

Set-Acl -Path 'C:\Temp' -AclObject $acl
于 2016-12-18T19:18:43.697 に答える