You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将带权限文件夹复制到新NAS共享的PowerShell问题求助

问题:Windows Server 2019下新NAS共享的ACL权限迁移失败

我编写了一个修改网络文件夹ACL的PowerShell脚本,此前在本地驱动器和旧网络共享上运行正常。迁移至Windows Server 2019并使用新NAS共享后,Set-Acl命令执行失败,暂未明确原因。

相同代码可在本地目录正常创建和修改文件夹,我尝试先在本地创建文件夹并为AD组分配ReadandExecute、Write权限,再迁移至NAS共享,但仍失败。

已尝试的操作

  • 本地目录内移动文件夹,AD组权限可保留:
    Move-Item -Path D:\pathsimulation\non_prod\testfolder -Destination D:\Temp -Force
    
  • 移动至NAS时,AD组权限被移除:
    Move-Item -Path D:\pathsimulation\non_prod\testfolder -Destination T:\somefolders\in_data\non_prod -Force
    
  • 使用Robocopy复制,文件夹被跳过且无错误日志:
    $sourcePath = "D:\pathsimulation\non_prod\testfolder"
    $destinationPath = "T:\somefolders\in_data\non_prod"
    
    Robocopy.exe $sourcePath $destinationPath /E /COPYALL /DCOPY:DAT /LOG+:D:\RobocopyLog.txt 
    
  • 使用Xcopy复制到NAS提示权限不足,复制到本地无权限错误但未移动文件:
    复制到NAS的命令及错误:
    xcopy D:\pathsimulation\non_prod\testfolder T:\somefolders\in_data\non_prod /O /X /E /H /K
    
    0 File(s) copied
    xcopy : File creation error - A required privilege is not held by the client.
    At line:1 char:1
    + xcopy D:\pathsimulation\non_prod\t...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (File creation e... by the client.:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
     
    Unable to create directory - T:\somefolders\in_data\non_prod
    
    本地Xcopy命令:
    xcopy "D:\pathsimulation\non_prod\testfolder" "D:\Temp" /X /H /E /V
    
    0 File(s) copied
    

可行解决方案建议

1. 排查NAS权限基础配置

  • 确认NAS共享的共享权限和NTFS权限:执行脚本的账户需在目标路径拥有修改或完全控制权限,尤其是创建子文件夹和修改ACL的权限。新NAS可能默认权限更严格,比如共享权限仅开放读取。
  • 验证账户特权:执行脚本的账户需拥有SeSecurityPrivilege(管理ACL必备),可通过whoami /priv命令查看是否启用该特权。

2. 优化Move-Item的权限保留逻辑

  • 使用PowerShell的-PreserveAuthorization参数强制保留权限(需PowerShell 5.1及以上版本):
    Move-Item -Path D:\pathsimulation\non_prod\testfolder -Destination T:\somefolders\in_data\non_prod -Force -PreserveAuthorization
    
  • 改用UNC路径替代映射驱动器:避免映射驱动器的权限上下文差异,直接访问NAS共享:
    Move-Item -Path D:\pathsimulation\non_prod\testfolder -Destination \\NAS-Server\somefolders\in_data\non_prod -Force -PreserveAuthorization
    

3. 修复Robocopy的执行问题

  • 检查目标路径父目录权限:确保T:\somefolders\in_data存在且执行账户有写入权限,Robocopy需要父目录权限来创建目标子文件夹。
  • 添加重试和详细日志参数:排查跳过原因,增加网络容错性:
    $sourcePath = "D:\pathsimulation\non_prod\testfolder"
    $destinationPath = "T:\somefolders\in_data\non_prod"
    Robocopy.exe $sourcePath $destinationPath /E /COPYALL /DCOPY:DAT /LOG+:D:\RobocopyLog.txt /R:3 /W:5 /V
    
  • 拆分复制与ACL设置:如果NAS不支持完整权限复制,先复制文件和结构,再单独应用ACL:
    # 复制文件夹与文件
    Robocopy.exe $sourcePath $destinationPath /E /COPY:DAT /DCOPY:DAT /LOG+:D:\RobocopyLog.txt
    # 提取本地ACL并应用到NAS
    $acl = Get-Acl -Path $sourcePath
    Set-Acl -Path $destinationPath -AclObject $acl
    

4. 解决Xcopy的权限缺失问题

  • 以管理员身份运行PowerShell:Xcopy需要SeRestorePrivilege和SeBackupPrivilege,管理员账户默认拥有这些特权。
  • 检查目标路径的继承权限:确保T:\somefolders\in_data的权限已正确继承到子文件夹,或直接给执行账户分配该路径的创建权限。

5. 直接在NAS上设置ACL

  • 跳过本地迁移,直接在NAS路径创建文件夹并应用ACL,验证Set-Acl是否能在NAS上正常运行:
    # 在NAS创建目标文件夹
    New-Item -Path T:\somefolders\in_data\non_prod\testfolder -ItemType Directory -Force
    # 获取本地测试文件夹的ACL
    $acl = Get-Acl -Path D:\pathsimulation\non_prod\testfolder
    # 应用到NAS文件夹
    Set-Acl -Path T:\somefolders\in_data\non_prod\testfolder -AclObject $acl
    
  • 开启PowerShell调试日志:如果Set-Acl仍失败,查看详细错误信息定位原因:
    Set-PSDebug -Trace 2
    Set-Acl -Path T:\somefolders\in_data\non_prod\testfolder -AclObject $acl
    
    若日志提示NAS不支持NTFS ACL,说明该NAS可能仅支持共享权限,需改用NAS自带的权限管理工具配置AD组权限。

内容的提问来源于stack exchange,提问作者Eleandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:02:12