我正在尝试找到一种方法,将多个用户的 ID 映射到 Active Directory (AD) 中的关联电子邮件地址,然后将输出附加到 txt 文件中,最终生成包含电子邮件地址列表的单个文件。通过利用 PowerShell AD 工具的以下命令,我可以输出特定用户的电子邮件地址:
$user= testID
Get-ADUser $user -server ml -Properties * | Select-Object mail
现在,我正在尝试使其适应多个用户的工作,尽管我遇到的方法不会将每个结果附加或连接到 txt 文件。循环迭代时的每个新输出都会覆盖现有文本文件的内容。
$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
}
任何方向或见解,非常感谢!
谢谢
建立在亚伯拉罕·齐纳拉有用的评论:
The 即时修复是替换>
with >>
在你的里面foreach loop:
然而,using >>
在循环内是最好的avoided, 因为它是:
所以,最好使用pipeline with a single Out-File
call / >
接收输出的操作all流式迭代:
Note:
-
A foreach
陈述不能直接在管道中使用,因此需要重定向,这就是为什么类似的原因ForEach-Object cmdlet下面使用的是$multiple_users
数组是piped,导致其元素被一一处理,如自动的$_多变的.
-
或者,您可以包装一个语句,例如foreach
or while
in & { ... }
or . { ... }
允许它参与管道;例如。:
& { foreach ($i in 1..2) { $i } } > out.txt
-
下面的解决方案类似地适用于使用Set-Contentcmdlet(比>
/ Out-File
如果您知道要写入文件的对象是strings已经):使用single Set-Content
在管道末尾调用(而不是调用Add-Content
在每个循环迭代中)。
$multiple_users |
ForEach-Object {
Get-ADUser $_ -server ml -Properties mail |
Select-Object mail
} > ID_to_email.txt # Write ALL output to ID_to_email.txt
代替> ID_to_email.txt
,你可以使用| Out-File ID_to_email.txt
反而;明确使用Out-File
is required在以下情况下:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)