powershell - 其中AD用户没有配置文件路径

时间:2017-05-25 14:46:52

标签: powershell active-directory

我们组织中的某些用户尚未在AD中配置配置文件路径。 (在远程桌面服务配置文件下。)

我想得到所有这些用户,所以我在Powershell中写了这个:

Write-Host "Running..."
$users=Get-ADUser -Filter *
foreach($user in $users)
    {

        $userDN=(Get-ADUser $user).DistinguishedName
        $Userinfo=[ADSI]"LDAP://$userDN"
        $TermianlPath=$Userinfo.TerminalServicesProfilePath

        if ($TermianlPath -eq $null)
            {
                $UserSAMName=$user.SamAccountName
                Write-Host "User $UserSAMName has no Terminal path." -ForegroundColor Cyan
            }
    }

Write-Host "Completed." -ForegroundColor Yellow

检查" if($ TermianlPath -eq $ null)"不给任何东西......

有人可以帮忙吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

PowerShell与$ null有点奇怪。很多时候,某些东西不能作为$ null返回,而是作为空字符串返回。尝试检查$ null和""。

此外,您可以使用[string] :: IsNullOrEmpty()以及任何可能是字符串的变量,而不是使用两个空引号""。

答案 1 :(得分:0)

您尝试做的事情有两个问题。

  1. $Userinfo没有将每个广告属性作为属性公开。默认情况下,PowerShell允许您无错误地请求不存在的变量属性。

  2. 您要查找的属性是not called TerminalServicesProfilePath in Server 2008+。如果您查看ADSI编辑或其他方式,您将看到这些属性

  3. msTSAllowLogon
    msTSHomeDirectory 
    msTSHomeDrive 
    msTSProfilePath
    ....
    

    所以你应该做的就是返回配置文件路径,如果它不存在则返回null。

    $userInfo.psbase.InvokeGet("msTSProfilePath")
    

    使用这样的东西应该有效

    Get-ADUser -Filter * | 
        Where-Object{
            -not ([ADSI]"LDAP://$($_.DistinguishedName)").psbase.InvokeGet("msTSProfilePath")
        } | ForEach-Object{ 
            Write-Host "User $($_.SamAccountName) has no Terminal path." -ForegroundColor Cyan    
    }
    

    where子句将允许任何没有设置配置文件路径的用户传递管道。