【发布时间】:2014-01-10 20:33:49
【问题描述】:
我正在尝试确定 C:\Users 中的哪些用户文件夹在 Active Directory 中有活动用户。
我目前有以下:
$userProfile = Get-ChildItem -Path "C:\Users"
$unknownList = @()
foreach($user in $userProfile){
try{
Get-ADUser -Identity $user.Name | Out-Null
}
catch{
$unknownList += $user.Name
}
}
Write-Host $unknownList
我的问题是所有用户名似乎都不存在并被捕获。任何人都可以为 PowerShell 初学者提供一些建议吗?我尝试了在这里和其他地方发现的许多其他东西,但没有一个能够工作。谢谢!
【问题讨论】:
-
C:\Users中的文件夹名称与 AD 中的用户名称不匹配。如果用户配置文件已经存在,则可能是username.DomainName.###。 -
据我所知,您的代码看起来是正确的。唯一可能成为问题的是您的
Catch { }块可能永远无法到达,因为 Get-ADUser 会创建非终止错误。要解决此问题,请在Get-ADUser上使用-ErrorAction Stop。这会将错误变为终止错误。 -
@TrevorSullivan 他的问题是 all 名称会引发错误,因此会出现在
$unknownList中。 -
导致名称以
$unknownList结尾的实际错误是什么?在catch块中添加一行Write-Error $_,这样您就可以看到发生了什么。您使用的是 PowerShell v2 吗? PowerShell 在 v3 之前不支持自动模块加载,因此您需要先运行Import-Module ActiveDirectory,然后才能使用Get-ADUser。您可以通过回显$PSVersionTable来检查您的 PowerShell 版本。 -
我会在每个文件夹中的 ntuser.dat 文件上使用 Get-ACL,并查看所有者是否解析为用户,或者是孤立的 SID。使用文件夹名称进行帐户解析可能不可靠。用户名可以更改或截断,并且与其主文件夹的名称不匹配。
标签: windows powershell active-directory