首页 > 解决方案 > 在 C 以外的任何内容上设置权限时出现 SET-ACL 问题:在 1 个特定服务器上的驱动器

问题描述

我在一些让我有点发疯的问题上得到了一些帮助。

基本上我们有一个内部开发的大型用户工具系统,其功能之一是创建用户帐户,创建主文件夹结构并为其分配用户权限。该工具集可跨 10 个左右的域和多个文件服务器(某些域可以有 70 个个人客户与它与之交互的本地文件服务器......)所有工作都很好地完成了一段时间。

这些脚本在可以访问所有域并由半特权帐户运行的实用程序服务器上运行 - 不是域管理员或 Ent Admins。在其中一个域上,除非用户帐户/组用于运行代码的是 FileServer 上的管理员 - 在其他任何地方都没有这样设置,并且文件夹的权限在任何地方都是相同的。

它在此服务器上工作的唯一方法是在 C 驱动器上,它不适用于任何其他驱动器卷(D、E 等)。所有 NTFS 和共享权限都完全相同(从实际的真实共享复制到C) 根目录上的测试共享

下面是代码片段,假设共享位于D驱动器上....:

           #Share Location
           $userpath = "\\Server1\TEST\Test.User10"


           $NewUser = get-aduser -Identity Test.User10 -Server MyDomain.local -Properties * | Select SID
           #Folders
            #$userPath = $creationSite.homePath+"\"+$userUsername
            $userSID = $newUser.SID

            Write-Host "Creating user folders at: $userPath"
            Write-Host ""
            Write-Host "Securing for $userSID"
            Write-Host ""
            New-Item "$userPath" -ItemType Directory | Out-Null
            New-Item "$userPath\Documents" -ItemType Directory | Out-Null
            New-Item "$userPath\Desktop" -ItemType Directory | Out-Null
            New-Item "$userPath\Favorites" -ItemType Directory | Out-Null

$acl = Get-Acl $userPath

$FileSystemRights = [System.Security.AccessControl.FileSystemRights]"FullControl"
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]"NONE"

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($userSID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
$acl.AddAccessRule($AccessRule) 
      
     Set-Acl -Path $userPath -AclObject $acl -Verbose

这将产生以下错误:

Set-Acl : Attempted to perform an unauthorized operation.

+ ...         $icaclsRes = Set-Acl -Path $userPath -AclObject $acl -Verbose
+                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: ("\\Server1\TEST\Test.User10":String) [Set-Acl], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetAclCommand

如果我运行上述脚本指向 C 驱动器上的共享,设置完全相同的权限、文件夹继承等,那么它将成功完成。

就像我说的那样,整个系统已经在很多系统中使用了几年,我没有遇到过这个问题。

同样,如果我将半特权安全组添加为相关文件服务器上的本地管理员,它也可以正常工作。

我已经检查了所有 UAC 等,这主要是关闭的,但最重要的是设置与我拥有的所有其他服务器相同。

非常感谢您的帮助或建议。

谢谢。

标签: powershellserveraclwindows-server-2012-r2drive

解决方案


推荐阅读