将多个 ID 映射到 Active Directory 中的电子邮件地址并将结果输出到单个文件

问题描述 投票:0回答:1

我正在尝试找到一种方法,将多个用户的 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
    }

任何方向或见解,非常感谢!

谢谢你

powershell for-loop active-directory io-redirection txt
1个回答
1
投票

Abraham Zinala 的有用评论为基础:

立即修复是将

>
替换为
>>
foreach
循环中:

  • 重定向

    >
    实际上是
    Out-File
    的别名,因此在每次迭代中替换目标文件,这不是您想要的。

  • 相比之下,

    >>
    实际上是
    Out-File
    -Append
    的别名,因此appends到目标文件。

但是,使用

>>
在循环内是最好的避免,因为它是:

  • 效率低下,因为目标文件必须在每次迭代中打开和关闭。

  • 不方便,因为在循环之前必须确保目标文件还不存在或为空,以免意外追加到预先存在的内容。

因此,

最好使用 pipelinesingle Out-File

 调用 / 
>
 操作,以流方式接收来自 
all 迭代的输出:

注:

  • A

    foreach

     
    statement 不能直接在管道中使用,因此需要重定向,这就是为什么下面使用类似的 ForEach-Object
     
    cmdlet,其中 $multiple_users
     数组是 
    piped ,导致其元素被一一处理,如 automatic $_
     变量
    所示。

  • 或者,您可以将

    foreach

    while
     等语句包装在 
    & { ... }
    . { ... }
     中,以允许其参与管道;例如:

    & { foreach ($i in 1..2) { $i } } > out.txt
    
    

  • 下面的解决方案类似地适用于使用

    Set-Content

     cmdlet(如果您已经知道要写入文件的对象是 strings
    ,则它比 
    >
     / 
    Out-File 更有效):使用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
必需的

  • 强制将目标文件路径解释为

    literal路径,带有-LiteralPath

    ,特别是如果它包含
    [
    ]
    (也许令人惊讶的是,
    >
    Out-File
    (通常是位置暗示的) )
    -FilePath
    参数将路径视为
    通配符表达式 - 请参阅这个答案)。

  • 通过

    -Encoding

     参数控制用于输出文件的字符编码。

© www.soinside.com 2019 - 2024. All rights reserved.