我们组织中的某些用户尚未在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)"不给任何东西......
有人可以帮忙吗?
谢谢。
答案 0 :(得分:0)
PowerShell与$ null有点奇怪。很多时候,某些东西不能作为$ null返回,而是作为空字符串返回。尝试检查$ null和""。
此外,您可以使用[string] :: IsNullOrEmpty()以及任何可能是字符串的变量,而不是使用两个空引号""。
答案 1 :(得分:0)
您尝试做的事情有两个问题。
$Userinfo
没有将每个广告属性作为属性公开。默认情况下,PowerShell允许您无错误地请求不存在的变量属性。
您要查找的属性是not called TerminalServicesProfilePath
in Server 2008+。如果您查看ADSI编辑或其他方式,您将看到这些属性
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子句将允许任何没有设置配置文件路径的用户传递管道。