2016-11-25 34 views
0

我需要一些幫助,使用我的PowerShell腳本以Set-Acl更改NTFS權限。我已經得到了這個。 只要我在列表中只有一個id,它就會工作。只要我有超過1個ID,我總是得到這個錯誤:Set-Acl。部分或全部標識引用無法翻譯。 XML.config

Some or all identity references could not be translated.

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." 
In D:*********.ps1:32 Zeichen:13 
+  Add {$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." 
In D:*********.ps1:33 Zeichen:16 
+  Delete {$acl.RemoveAccessRuleAll($rule)} 
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : IdentityNotMappedException 

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

有人可以幫忙嗎?

+0

我在這個腳本中改變了很多,但又遇到了另一個問題。 所以,如果有人需要一個像這樣的腳本[http://stackoverflow.com/questions/41680708/set-folder-subfolder-and-file-permission-set-acl-powershell-script-setting-fil](http ://stackoverflow.com/questions/41680708/set-folder-subfolder-and-file-permission-set-acl-powershell-script-setting-fil),也許你會發現我找不到的錯誤 –

回答

0

您的$path*變量包含來自XML中相應節點的所有值的數組,但FileSystemAccessRule構造函數需要每個規則的單個標識引用。

$doc.Pfade.pfadForEach-Object循環,把循環內的$path*變量賦值的休息:

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

此外,您for環和$arrayid*變量是毫無意義的。刪除它們。

+0

謝謝你非常 –

相關問題