【问题标题】:PowerShell ForEach Loop to Add UserPrincipalName and object ID to a filePowerShell ForEach 循环将 UserPrincipalName 和对象 ID 添加到文件
【发布时间】:2021-06-24 02:36:39
【问题描述】:

我有一个用户电子邮件文件。我需要收集他们的 UPN 和对象 ID。

Get-AzureADUser -Filter "PrimarySMTPAddress eq '$user.EmailAddress'"
  • 我正在使用这条线来查询 AzureAD,它运行良好。但是,当我将它放在一个循环中时,我似乎无法获得任何数据。
import-csv .\Book4.csv | ForEach-Object{
    Get-AzureADUser -Filter "PrimarySMTPAddress eq '$_.EmailAddress'" | Select-Object UserPrincipalName, ObjectID
} | Export-Csv -Path .\Book4.csv -NoTypeInformation

谁能告诉我哪里出错了。我认为这会很简单,但我已经被困了一个小时。 CSV 文件具有三个列标题:EmailAddress、UserPrincipalName、ObjectID

【问题讨论】:

  • 另外,由于您已经拥有用户的 UPN,您可以使用 -SearchString $_.UPN(其中 UPN 将是 CSV 标头)。

标签: arrays powershell foreach azure-active-directory


【解决方案1】:

"PrimarySMTPAddress eq '$_.EmailAddress'" 无法按预期工作,因为尝试对变量 $_.EmailAddress属性访问无效:

"..."expandable string 中,您需要$(...)subexpression operator 才能访问变量的属性[1] ,在其上调用方法,或者更一般地嵌入整个语句

因此,请改用以下字符串:

"PrimarySMTPAddress eq '$($_.EmailAddress)'"

此外,您错误地尝试在同一管道中读取和写回同一文件 (.\Book4.csv),这不起作用(无需额外努力),如 Allen Wu's helpful answer 中所述。


[1] 不包含在 $(...) 中,"...$_.EmailAddress..." 导致 $_ 被扩展自身,而 .EmailAddress 被使用 逐字 .例如,比较 Write-Output "$HOME.Length"Write-Output "$($HOME.Length)"

【讨论】:

    【解决方案2】:

    @mklement0 是正确的。

    但是另一个重要的事情是我们不能在同一个管道中读取和写回同一个文件。除非您确保在通过管道发送其行之前将输入文件完整读入内存。

    使用这个:

    $users = import-csv E:\temp\Book4.csv | ForEach-Object{
        Get-AzureADUser -Filter "PrimarySMTPAddress eq '$($_.EmailAddress)'" | Select-Object UserPrincipalName, ObjectID
    } 
    
    $users | Export-Csv -Path E:\temp\Book4.csv -NoTypeInformation
    

    【讨论】:

    • 关于尝试写回同一管道中的同一文件的好点。但是请注意,有一个简单的解决方法,它允许坚持使用单个管道:将文件读取命令 (Import-Csv) 包含在 (...) 中,这会强制预先完整读取:(import-csv E:\temp\Book4.csv) | ForEach-Object { Get-AzureADUser -Filter "PrimarySMTPAddress eq '$($_.EmailAddress)'" | Select-Object UserPrincipalName, ObjectID } | Export-Csv -Path E:\temp\Book4.csv -NoTypeInformation
    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2018-05-19
    • 2010-10-31
    • 2021-04-08
    相关资源
    最近更新 更多