2016-11-25 7 views
0

でNTFSの権限を変更するには、PowerShellスクリプトのヘルプが必要です。私はすでにこれを持っています。 リストにIDが1つしかないとすぐに動作します。Set-Acl。一部またはすべてのID参照は翻訳できませんでした。 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
できるだけ早く私が1つの以上のIDを持っているように私はいつもこのエラーが出ます

誰かが助けてくれますか?

+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コンストラクタでは、各ルールに対して単一のID参照が必要です。 ForEach-Objectループに

パイプ$doc.Pfade.pfadとループ内の$path*変数の割り当ての残りを置く:

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

はまた、あなたのforループと$arrayid*変数は無意味です。削除してください。

+0

ありがとうあなたは非常に –

関連する問題