如何修改PowerShell命令让AD用户邮箱输出为可直接匹配的简单数组
如何将AD查询结果转为纯邮箱字符串数组?
我在客户的AD环境中运行以下PowerShell命令:
$members=Get-ADGroupMember -Identity "my ad group" -Recursive | % {Get-ADUser -Identity $_.distinguishedName -Properties * | ? {$_.enabled -eq $true} | select-object emailaddress} $members emailaddress ------------ john.bob@org.com pete.smith@org.com
该命令输出看似CSV格式,但实际是包含emailaddress属性的对象数组。尝试搜索该变量时,仅能通过以下方式匹配:
$members -like "@{emailaddress=john.bob@org.com}" @{emailaddress=john.bob@org.com}
而我希望能直接使用如下语法匹配邮箱地址:
$members -like "john.bob@org.com" john.bob@org.com
因此需要修改初始命令,让输出成为仅包含邮箱地址的简单字符串数组,请问该如何实现?
解决方案
只需要在Select-Object后添加-ExpandProperty参数,直接提取emailaddress属性的字符串值,而非返回包含该属性的对象。修改后的命令如下:
$members = Get-ADGroupMember -Identity "my ad group" -Recursive | ForEach-Object { Get-ADUser -Identity $_.distinguishedName -Properties EmailAddress } | Where-Object { $_.Enabled -eq $true } | Select-Object -ExpandProperty EmailAddress
额外优化说明:
- 无需用
Properties *加载所有AD用户属性,明确指定EmailAddress可大幅提升查询效率 - 使用
ForEach-Object完整名称比别名%可读性更强(若习惯别名也可保留) - 修改后
$members会成为纯字符串数组,此时直接执行$members -like "john.bob@org.com"即可匹配目标邮箱
内容的提问来源于stack exchange,提问作者Jepper
相关产品推荐
相关产品推荐

