我是一个强大shell的初学者。我需要编写一个命令,用于从活动目录中获取samccountname中的电子邮件地址。我已将所有samaccountnames存储在Users.txt文件中。
$users=Get-content .\desktop\users.txt
get-aduser -filter{samaccountname -eq $users} -properties mail | Select -expandproperty mail
请建议我如何继续这样做。我在这里做错了什么。
答案 0 :(得分:3)
从文件中读取后,$Users
成为用户的集合。您无法将整个集合传递到过滤器,您需要一次处理一个用户。您可以使用ForEach循环执行此操作:
$users = Get-Content .\desktop\users.txt
ForEach ($User in $Users) {
Get-ADUser -Identity $user -properties mail | Select -expandproperty mail
}
这会将每个用户的电子邮件地址输出到屏幕。
根据评论,也没有必要使用-filter
,根据上述情况,您可以直接将samaccountname直接发送到-Identity
参数。
如果要将输出发送到另一个命令(例如export-csv),则可以改为使用ForEach-Object:
$users = Get-Content .\desktop\users.txt
$users | ForEach-Object {
Get-ADUser -Identity $_ -properties mail | Select samaccountname,mail
} | Export-CSV user-emails.txt
在此示例中,我们使用$_
来表示管道中的当前项(例如用户),然后将命令的输出传递给Export-CSV。我以为你可能也希望这种输出同时具有samaccountname和mail,以便你可以交叉引用。