Windows 确定用户是否在使用PowerShell的Active Directory中

Windows 确定用户是否在使用PowerShell的Active Directory中,windows,powershell,active-directory,Windows,Powershell,Active Directory,我正在尝试确定C:\Users中的哪些用户文件夹在active Directory中有活动用户 我目前有以下情况: $userProfile = Get-ChildItem -Path "C:\Users" $unknownList = @() foreach($user in $userProfile){ try{ Get-ADUser -Identity $user.Name | Out-Null } catch{ $unknownLi

我正在尝试确定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的首次亮相提供一些建议吗?我尝试过在这里和其他地方发现的许多其他东西,但都没有成功。谢谢大家!

我想做一些类似的事情,但令人震惊的是,要想知道广告中是否存在用户,唯一的办法似乎是野蛮地让Get ADUser抛出一个错误,然后让你抓住它。经过大量研究,我发现,如果使用
-Filter
参数,实际上会返回与Filter参数匹配的用户对象或$Null对象(因为没有任何对象与
-Filter
参数匹配),而不是使用
-Identity
参数。一旦变量中有了它,就可以执行“适当的”if/else语句求值,而不会抛出任何错误

这是您的代码:

$userProfile = Get-ChildItem #-Path "C:\Users"
$unknownList = @()
foreach($user in $userProfile){

    #Try getting the user
    $ADUser = Get-ADUser -Filter {SamAccountName -eq $User.Name}

    #Test to see if the user exists
    If($ADUser)
    {
        #User Exists
        #Write-host "$($User.Name) Exists"
    }
    Else
    {
        #User does not Exist
        #Write-host "$($User.Name) Does not Exist"

        Write-host "$($User.Name)"
    }
}

我想做一些类似的事情,但令人震惊的是,要想知道广告中是否存在用户,唯一的办法似乎是野蛮地让Get ADUser抛出一个错误,然后你就抓住了它。经过大量研究,我发现,如果使用
-Filter
参数,实际上会返回与Filter参数匹配的用户对象或$Null对象(因为没有任何对象与
-Filter
参数匹配),而不是使用
-Identity
参数。一旦变量中有了它,就可以执行“适当的”if/else语句求值,而不会抛出任何错误

这是您的代码:

$userProfile = Get-ChildItem #-Path "C:\Users"
$unknownList = @()
foreach($user in $userProfile){

    #Try getting the user
    $ADUser = Get-ADUser -Filter {SamAccountName -eq $User.Name}

    #Test to see if the user exists
    If($ADUser)
    {
        #User Exists
        #Write-host "$($User.Name) Exists"
    }
    Else
    {
        #User does not Exist
        #Write-host "$($User.Name) Does not Exist"

        Write-host "$($User.Name)"
    }
}

C:\Users
中的文件夹名称与AD中的用户名称不一定匹配。如果用户配置文件已经存在,则可能是
username.DomainName.###
。据我所知,您的代码看起来是正确的。唯一可能出现问题的是,
Catch{}
块可能永远无法到达,因为Get-ADUser会创建非终止错误。要解决此问题,请使用
获取ADUser
上的
-ErrorAction Stop
。这会将错误变为终止错误。@TrevorSullivan他的问题是,所有名称都会抛出一个错误,从而以
$unknownList
结尾。导致名称以
$unknownList
结尾的实际错误是什么?在
catch
块中添加一行
Write Error$\uuu
,以便查看发生了什么。您正在使用PowerShell v2吗?PowerShell在v3之前不支持自动模块加载,因此您需要运行
Import module ActiveDirectory
,然后才能使用
Get ADUser
。您可以通过回显
$PSVersionTable
来检查PowerShell版本。我会对每个文件夹中的ntuser.dat文件使用Get ACL,查看所有者是否解析为用户,或者是孤立SID。使用文件夹名称进行帐户解析可能不可靠。用户名可以更改或截断,并且与主文件夹的名称不匹配。
C:\Users
中的文件夹名称与AD中的用户名称不匹配。如果用户配置文件已经存在,则可能是
username.DomainName.###
。据我所知,您的代码看起来是正确的。唯一可能出现问题的是,
Catch{}
块可能永远无法到达,因为Get-ADUser会创建非终止错误。要解决此问题,请使用
获取ADUser
上的
-ErrorAction Stop
。这会将错误变为终止错误。@TrevorSullivan他的问题是,所有名称都会抛出一个错误,从而以
$unknownList
结尾。导致名称以
$unknownList
结尾的实际错误是什么?在
catch
块中添加一行
Write Error$\uuu
,以便查看发生了什么。您正在使用PowerShell v2吗?PowerShell在v3之前不支持自动模块加载,因此您需要运行
Import module ActiveDirectory
,然后才能使用
Get ADUser
。您可以通过回显
$PSVersionTable
来检查PowerShell版本。我会对每个文件夹中的ntuser.dat文件使用Get ACL,查看所有者是否解析为用户,或者是孤立SID。使用文件夹名称进行帐户解析可能不可靠。用户名可以更改或截断,并且与主文件夹的名称不匹配。