在网络驱动器上的Set-Acl上获取错误代码1

时间:2015-11-21 20:57:18

标签: powershell

我有一个文件夹结构,在新的NAS(synology)上恢复了损坏的权限。所有文件夹(+1000)包含13个子文件夹的相同结构,每个子文件夹都有其特定权限。

我有一个'示例'在同一个驱动器上的结构,我现在试图获取/设置不同文件夹上的acl。但每次我尝试Set-Acl'我收到了这种错误:

Set-Acl : Method failed with unexpected error code 1.
At line:1 char:1
+ Set-Acl -Path ".\1019 Stekene Molenbergstraat" -AclObject $MainAcl
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (N:\WERVEN\WERVE...Molenbergstraat:String) [Set-Acl], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.SetAclCommand

我尝试了很多不同的事情...... 直接在UNC上映射为驱动器,使用Get-Acl,Set-Acl,GetAccessControl(' Access'),SetAccessControl($ acl),绝对路径,相对路径等组合。

$TemplateAcl = Get-Acl ".\{TEMPLATE}"
Set-Acl -Path ".\OTHER" -AclObject $TemplateAcl
# Error..

$TemplateItem = Get-Item ".\{TEMPLATE}";
$TemplateAcl = $TemplateItem.GetAccessControl('Access');
Set-Acl -Path ".\OTHER" -AclObject $TemplateAcl
# Error...

$OtherItem = Get-Item ".\OTHER";
$OtherItem.SetAccessControl($TemplateAcl);
# No error.. but nothing has changed

我可以完全访问此驱动器。我可以在Windows中设置权限就好了。使用robocopy,我可以复制一个维护它的权限的结构。在PowerShell中...我一直收到此错误代码1.

我想出了所有想法......

编辑22 nov - 第1部分

根据评论中的要求:

PS N:\WERVEN> $error[0].exception|select *;


Message        : Method failed with unexpected error code 1.
Data           : {}
InnerException : 
TargetSite     : Void Persist(System.String, System.Runtime.InteropServices.SafeHandle, System.Security.AccessControl.AccessControlSections, System.Object)
StackTrace     :    at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object 
                 exceptionContext)
                    at System.Security.AccessControl.FileSystemSecurity.Persist(String fullPath)
                    at Microsoft.PowerShell.Commands.FileSystemProvider.SetSecurityDescriptor(String path, ObjectSecurity sd, AccessControlSections sections)
                    at Microsoft.PowerShell.Commands.FileSystemProvider.SetSecurityDescriptor(String path, ObjectSecurity securityDescriptor)
                    at System.Management.Automation.SessionStateInternal.SetSecurityDescriptor(CmdletProvider providerInstance, String path, ObjectSecurity 
                 securityDescriptor, CmdletProviderContext context)
HelpLink       : 
Source         : mscorlib
HResult        : -2146233079




PS N:\WERVEN> $error[0].exception.innerexception| select *

PS N:\WERVEN> 

编辑22 nov - 第2部分

似乎有一些已知的'在synology上分配权限的问题:http://mikebeach.org/2014/12/06/acl-fix-for-synology-diskstations/

由于我在这方面失去了太多时间,我通过使用ROBOCOPY扩展我的脚本以将每个文件夹的文件夹移动到本地光盘来修复我的问题。在本地光盘上,我将权限和/ MOVE / SEC / E文件夹修复回NAS。

需要更多时间......但它确实有效。我可以睡个好觉。

2 个答案:

答案 0 :(得分:0)

我说删除require.cache参数名称,它不存在(至少在PowerShell 5上)。这适用于我的计算机(我指定了要测试的绝对路径):

-AclObject

答案 1 :(得分:0)

似乎没有任何快速答案。由于某种原因,无法在synology nas上使用Set-Acl。

你看到的任何地方都被称为工具'synoacltool'。荒谬!