Powershell:当用户尝试更新网络文件夹的所有权时确实存在时,出现 IdentityNotMappedException

问题描述 投票:0回答:1

顺便说一下,我是 powershell 新手。

我正在尝试修复前任管理员严重搞乱的权限和所有权。 我们有一个网络共享,用于 AD 中的文件夹重定向。我们还拥有 3 个 DC。

我已经修复了共享文件夹和子目录的用户权限。我剩下的就是修复文件夹的所有权,因为它们全部归以前的管理员所有,并且这些文件夹用于用户的主页。

我一直在写一个脚本,我原以为只需要一个小时,但现在已经花了 4 个小时,这真的让我很困惑。

这是我的脚本:

$sharedDir = '\\Jupiter\Users'

# Loop over shared directory to process each directory
Get-ChildItem $sharedDir|foreach-object {
    # Directories are usernames
    $userName = $_.Name
    $userDir = $_.FullName

    try {
        Write-Host 'Processing: ' $userName

        # Get AD Details for the user with properties
        $adDetails = Get-ADUser -Identity $userName -Properties *

        # Check if the user is enabled
        if ($adDetails.Enabled -eq $FALSE) {
            Write-Host '- is disabled'
            Write-Host '- Skipped'
        } else {
            Write-Host '- is ENABLED'
            # Fetch ACL for the directory            
            $acl = $null; # Reset
            $acl = Get-Acl -Path $userDir

            # Fetch the current ownership
            $ownership = $acl.sddl -replace 'o:(.+?)G:.+','$1'
            
            # Check if ownership matches
            if ($ownership -eq $adDetails.SID) {
                Write-Host '- Has correct ownership'
                Write-Host '- Skipped'
            } else {
                Write-Host '- Need to fix ownership'


                $objSID = New-Object 'Security.Principal.SecurityIdentifier' $adDetails.SID 

                # Fix ownership
                #$objUser = New-Object -TypeName System.Security.Principal.NTAccount -ArgumentList ($sid)
                #$acl.SetOwner($objSID)
                $objUser = New-Object System.Security.Principal.NTAccount("FFGROUP", $userName);
                $acl.SetOwner([System.Security.Principal.IdentityReference]$objUser)
                Set-Acl -Path $userDir -AclObject $acl
                
                
                Write-Host $userDir
                Write-Host $adDetails.SID

                Get-ACL -Path $userDir

                exit # Only do this one for now
            }

        }

    } catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {
        # User does not exist handling
        Write-Host '- Does not exist.'
        Write-Host '- Skipped'
    }
    
    # Sanity seperator
    Write-Host '--------------------------------------------------'

}

输出示例:

--------------------------------------------------
Processing:  ClaudiaO
- is ENABLED
- Has correct ownership
- Skipped
--------------------------------------------------
Processing:  ClaudiaV
- Does not exist.
- Skipped
--------------------------------------------------
Processing:  Conference
- is ENABLED
- Need to fix ownership
Set-Acl : Some or all identity references could not be translated.
At \\jupiter\Users\Jeremy\My Documents\WindowsPowerShell\fixPermissionsOnUsersDirectory.ps1:46 char:17
+                 Set-Acl -Path $userDir -AclObject $acl
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (\\Jupiter\Users\Conference:String) [Set-Acl], IdentityNotMappedException
    + FullyQualifiedErrorId : System.Security.Principal.IdentityNotMappedException,Microsoft.PowerShell.Commands.SetAclCommand

根据我的理解,这意味着它找不到用户。该用户确实存在。它对每个用户都这样做。

我可以做什么来解决所有权问题?缺少什么才能找到用户?我已经使用

Get-ADUser
获取用户,那么为什么它会给出
IdentityNotMappedException

我尝试过使用SID和用户名。我发现了大约 5 种不同的方法来创建这些,但都不起作用。我总是收到这个错误。我想我可能需要将其指向 DC,但不知道如何操作。

我是域管理员并拥有完全控制权。访问此共享时,我没有任何权限问题,并且此脚本是从我的用户运行的。

这是一个紧急情况,所以我正在处理这个问题,同时手动修复了数百个目录。任何帮助将不胜感激!

powershell active-directory acl
1个回答
0
投票

似乎您的代码过于复杂,您可以在 AD 用户的 .Translate

 上使用 
.SID
 方法
来获取
NTAccount
。无需手动执行此操作。

} else {
    Write-Host '- Need to fix ownership'
    $ntaccount = $adDetails.SID.Translate([System.Security.Principal.NTAccount])
    $acl.SetOwner($ntaccount)
    Set-Acl -Path $userDir -AclObject $acl
    Write-Host $userDir
    Write-Host $adDetails.SID
    Get-Acl -Path $userDir
    return # use `return` instead of `exit` here to end early
}
© www.soinside.com 2019 - 2024. All rights reserved.