【问题标题】:Set-Acl. Some or all identity references could not be translated. XML.config设置 Acl。部分或全部身份参考无法翻译。 XML.config
【发布时间】:2017-04-10 02:04:14
【问题描述】:

我需要一些有关我的 PowerShell 脚本的帮助,以使用 Set-Acl 更改 NTFS 权限。我已经得到了这个。 只要我在列表中只有一个 id,它就会起作用。只要我有超过 1 个 id,我总是会收到此错误:

部分或全部身份参考无法翻译。

XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<Pfade>
  <pfad id="1">
    <name>d:\Freigabe</name>
    <gruppe>Admin</gruppe>
    <rechte>FullControl</rechte>
    <aktion>allow</aktion>
    <rechtsetzen>Add</rechtsetzen>
  </pfad>
  <pfad id="2">
    <name>d:\Freigabe</name>
    <gruppe>Jeder</gruppe>
    <rechte>Modify</rechte>
    <aktion>deny</aktion>
    <rechtsetzen>Add</rechtsetzen>
  </pfad>
  <pfad id="3">
    <name>d:\Freigabe\Ordner</name>
    <gruppe>SYSTEM</gruppe>
    <rechte>FullControl</rechte>
    <aktion>allow</aktion>
    <rechtsetzen>Add</rechtsetzen>
  </pfad>
  <pfad id="4">
    <name>d:\Freigabe\Ordner</name>
    <gruppe>Admin</gruppe>
    <rechte>Modify</rechte>
    <aktion>allow</aktion>
    <rechtsetzen>Delete</rechtsetzen>
  </pfad>
  <pfad id="5">
    <name>d:\Freigabe\TEst</name>
    <gruppe>Jeder</gruppe>
    <rechte>Modify</rechte>
    <aktion>allow</aktion>
    <rechtsetzen>Delete</rechtsetzen>
  </pfad>
  <pfad id="6">
    <name>d:\Freigabe\TEst</name>
    <gruppe>Admin</gruppe>
    <rechte>FullControl</rechte>
    <aktion>allow</aktion>
    <rechtsetzen>Add</rechtsetzen>
  </pfad>
</Pfade>

PowerShell:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
cd $dir

$doc = [XML](Get-Content -Path struktur.xml)

[array]$arrayid = $doc.Pfade.pfad.id

for ($i=0; $i -lt $arrayid.count; $i++) {
    New-Variable -Name "arrayid$i" -Value $arrayid[$i]
}

$path = $doc.Pfade.pfad
$pathname = $doc.Pfade.pfad.name
$pathgruppe = $doc.Pfade.pfad.gruppe
$pathrecht = $doc.Pfade.pfad.rechte
$pathaktion = $doc.Pfade.pfad.aktion
$pathrechts = $doc.Pfade.pfad.rechtsetzen

foreach ($i in $arrayid) {
    $FolderName = $pathname
    $acl = Get-Acl $FolderName
    $acl.SetAccessRuleProtection($True, $False) #?
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($pathgruppe, $pathrecht, "ContainerInherit, ObjectInherit", "None", $pathaktion)
    $pathgruppe
    switch ($pathrechts) {
        Add {$acl.AddAccessRule($rule)}
        Delete {$acl.RemoveAccessRuleAll($rule)}
    }
    Set-Acl $FolderName $acl
}

Get-Acl $FolderName | select Path, Owner, Group, AccessToString | Format-List
cd $dir

Remove-Variable array*

错误信息:

Ausnahme beim Aufrufen von "AddAccessRule" mit 1 Argument(en): "Manche oder alle
Identitätsverweise konnten nicht übersetzt werden。”
在 D:*********.ps1:32 Zeichen:13
+ 添加 {$acl.AddAccessRule($rule)}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : IdentityNotMappedException

Ausnahme beim Aufrufen von "RemoveAccessRuleAll" mit 1 Argument(en): "Manche oder
alle Identitätsverweise konnten nicht übersetzt werden。”
在 D:*********.ps1:33 Zeichen:16
+ 删除 {$acl.RemoveAccessRuleAll($rule)}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : IdentityNotMappedException

设置 Acl : AclObject
在 D:*********.ps1:35 Zeichen:1
+ 设置 Acl $FolderName $acl
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (System.Object[]:Object[]) [Set-Acl], ArgumentException
    + FullyQualifiedErrorId : SetAcl_AclObject,Microsoft.PowerShell.Commands.SetAclCommand

有人可以帮忙吗?

【问题讨论】:

标签: xml powershell acl


【解决方案1】:

您的 $path* 变量包含具有来自 XML 中各个节点的所有值的数组,但 FileSystemAccessRule 构造函数要求每个规则都有一个标识引用。

$doc.Pfade.pfad 管道化到ForEach-Object 循环中,并将其余的$path* 变量赋值放入循环中:

$doc.Pfade.pfad | ForEach-Object {
    $pathgruppe = $_.gruppe
    $pathrecht  = $_.rechte
    $pathaktion = $_.aktion
    $pathrechts = $_.rechtsetzen
    $FolderName = $_.name
    ...
    Set-Acl $FolderName $acl
}

此外,您的 for 循环和 $arrayid* 变量毫无意义。删除它们。

【讨论】:

  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2012-07-11
相关资源
最近更新 更多