如何在Active Directory中批量映射用户ID到邮箱并输出到单个文件
批量将AD用户ID映射到邮箱并追加到文件的问题
我需要在Active Directory(AD)中将多个用户ID映射到对应的邮箱地址,把结果追加到一个txt文件,最终生成包含所有邮箱的列表。目前单个用户的查询命令可以正常输出邮箱:
$user= testID Get-ADUser $user -server ml -Properties * | Select-Object mail
但尝试批量处理时,每次循环都会覆盖文件内容,无法实现追加:
$multiple_users = "testID1", "testID2", "testID3" foreach ($multiple_user in $multiple_users){ Get-ADUser $multiple_user -server ml -Properties * | Select-Object mail > ID_to_email.txt }
需要解决这个问题,实现结果追加到文件。
解决方案
1. 改用追加运算符实现循环追加
PowerShell中>是覆盖写入,>>才是追加写入。修改循环内的输出逻辑,同时优化属性查询(避免加载所有属性提升效率):
$multiple_users = "testID1", "testID2", "testID3" foreach ($multiple_user in $multiple_users){ # 只加载需要的mail属性,而非所有属性 Get-ADUser $multiple_user -server ml -Properties mail | # 提取纯邮箱字符串,而非对象格式 Select-Object -ExpandProperty mail >> ID_to_email.txt }
2. 无循环批量查询(更高效)
Get-ADUser支持直接接收用户ID数组,一次性完成所有查询,再统一输出,比循环效率更高:
$multiple_users = "testID1", "testID2", "testID3" Get-ADUser -Identity $multiple_users -server ml -Properties mail | Select-Object -ExpandProperty mail | # 首次写入去掉-Append,追加到已有文件保留该参数 Out-File -FilePath ID_to_email.txt -Append
3. 过滤空邮箱(可选)
如果部分用户没有配置邮箱,可以过滤掉空值,避免文件出现空行:
$multiple_users = "testID1", "testID2", "testID3" Get-ADUser -Identity $multiple_users -server ml -Properties mail | Where-Object { $_.mail -ne $null } | Select-Object -ExpandProperty mail | Out-File -FilePath ID_to_email.txt -Append
内容的提问来源于stack exchange,提问作者Nelly
相关产品推荐
相关产品推荐

