You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

筛选mail属性已填写且proxyAddresses为空的AD用户

问题:筛选AD中mail已填写且proxyAddresses为空的用户

需求

获取所有mail属性已填写且proxyAddresses属性为空的AD用户列表。

最初尝试的实现步骤

  1. 先筛选mail属性不为空、且samAccountName符合特定命名规则的AD用户:
$ADUser = get-adUser -Properties Name,Mail,proxyAddresses -Filter {mail -like '*'} | Where {$_.samAccountname -match "(our naming scheme)"}
  1. 通过foreach循环结合if语句,进一步筛选proxyAddresses为空的用户:
foreach ($User in $ADUser) {
    if(($User).mail -ne $null -and ($User).proxyAddresses -eq $null)
    {
       $Users += $_.Name
    }
}

遇到的问题

执行上述代码后,$Users变量始终无内容,即便循环内可以正常输出$User对象,也无法通过该逻辑筛选出proxyAddresses为空的用户。

可行的替代方案

调整筛选顺序,先获取proxyAddresses为空的用户,再检查mail属性是否非空:

  1. 先筛选proxyAddresses为空的AD用户:
$ADUser = Get-ADUser -Properties Name,Mail,proxyAddresses -Filter {-not(proxyAddresses -like '*')} 
  1. 循环筛选mail属性非空的用户,并将结果导出到文件:
$result = foreach ($User in $ADUser) {
    if($User.mail -ne $null)
    {
      Write-Output($User).Name
    }
}
$result | Out-File -FilePath 'C:\temp\proxAddressesFilter.csv'

最初方案失败的原因

  1. proxyAddresses属性的特性:AD中的proxyAddresses是多值属性,即便未设置任何值,它返回的也不是$null,而是一个空数组(@())。用-eq $null无法匹配空数组,正确的判断方式应为$User.proxyAddresses.Count -eq 0或-not $User.proxyAddresses。
  2. 循环内变量引用错误:在foreach循环中,代码使用了$_.Name,但此处的$_并未指向当前循环的$User对象,正确的写法应为$User.Name,这也是$Users无法收集到内容的直接原因之一。

内容的提问来源于stack exchange,提问作者Trippin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:20:54