0

随着时间的推移,我们的组织经历了一些个人资料名称更改(即当一个人结婚时),并且还没有重命名用户主目录的标准。所以我们有像 MarySmith 这样的用户,他们的目录像 C:\USERS\MaryJones。到目前为止没有问题,但现在我们想清理这些以避免混淆。(此处使用的 MarySmith / MaryJones 仅用于说明目的。)我们开始采取一些安全措施,消除这种“混乱”在此过程中发挥了作用。

因此,我们的第一步是确定发生这种情况的案例。在域控制器上,我们发出了这样的 PowerShell 命令,用于初始概念证明:

get-ADUser MarySmith -properties * | Export-CSV -path C:\SOME\PATH.csv

我们发现根本没有提到 MaryJones 文件夹。有一个 HomeDirectory 属性,但它是空的。

再深入一点,在 Active Directory 用户和计算机 (ADUC) 中,当我们为用户提取属性时,我们也看不到配置文件路径、登录脚本、主文件夹......全为空的差异。然而,当用户 (MarySmith) 登录时,C:\USERS\MaryJones 中的 NTUSER.DAT 文件会得到更新。

谁能帮助我们了解如何检索正确的信息,以及 Windows 如何跟踪这些名称相关的事实?我相信,如果我们能够恢复这种关联,我们就可以消除一些问题。

谢谢,丹尼斯

4

1 回答 1

2

感谢@Lee_Daily 和@Thomas 在对问题的评论中提出的建议,我们提出了一个可行的解决方案(有一些无法翻译(被 Try/Catch 很好地捕捉到 - 正在调查 - 将更新理解后回答)。

更新那些不能翻译的,是由于从目录中删除相关用户后,系统上仍保留有 NTUSER.DAT 文件。***

以下是我们提出的脚本的相关部分:

$FOLDERS = Get-ChildItem -Path "C:\users\" 
ForEach ($FOLDER in $FOLDERS) {
    $NTUSER = $FOLDER.FullName + "\NTUSER.DAT"
    if (Test-Path $NTUSER) { # Profile file exists
    $SID = (Get-CimInstance -ClassName Win32_UserProfile | Where-Object {$_.LocalPath -like $FOLDER.FullName}).sid
        $USEROBJ = New-Object System.Security.Principal.SecurityIdentifier($SID)
        if ($USEROBJ -ne $NULL) {
            try {
                $USERNAME = $USEROBJ.Translate( [System.Security.Principal.NTAccount]).Value
                }
            catch [exception] {
                $USERNAME = $NULL
                }
            }
        if ($USERNAME -eq $Null) {
                Write-Host "Couldn't resolve user for $SID $FOLDER "
            }
        else {
            #Here we have a valid NTUSER path, and a profile name.
            #Now we can make miracles happen.
            A-Miracle-Happens($FOLDER.FullName, $USERNAME)
            }
        }
    }    

多谢你们。

于 2021-03-16T10:37:01.453 回答