对于每个循环只将 1 行输出到 CSV?

For each loop only outputting 1 line into CSV?

我目前正在尝试 运行 一份报告,以查找我环境中所有活跃的用户以及他们为自己申请的许可证。为此,我使用了以下代码:

$Users = import-csv c:\users.csv 

Foreach($User in $Users){

$UPN = $User.UserPrincipalNam
Get-MsolUser -UserPrincipalName "$UPN" | Select-Object DisplayName,Licenses | Export-Csv -Path C:\output.csv -NoTypeInformation

}

当我 运行 上面没有 Export-Csv -Path C:\output.csv -NoTypeInformation 时,我得到了我想要的预期输出信息,但是,当我 运行 使用导出选项时,我得到了 1 个用户,不是全部。

为什么会这样?

编辑:这不是建议问题的重复,-Append 解决了我的问题,因为他们的问题在没有 -Append

的情况下得到了解决

您需要将 -Append 开关添加到您的 Export-Csv 命令,以便在每次迭代期间不覆盖内容。另一种选择是将该 Export-Csv 命令移到循环之外,以便在循环完成后执行它。

选项 1:使用追加

$Users = Import-Csv c:\users.csv 

Foreach($User in $Users){

    $UPN = $User.UserPrincipalName
    Get-MsolUser -UserPrincipalName $UPN | Select-Object DisplayName,Licenses |
       Export-Csv -Path C:\output.csv -NoTypeInformation -Append

}

选项 2:循环后执行 Export-Csv

$Users = Import-Csv c:\users.csv 

$MsolUsers = Foreach($User in $Users){

    $UPN = $User.UserPrincipalName
    Get-MsolUser -UserPrincipalName $UPN | Select-Object DisplayName,Licenses

}

$MsolUsers | Export-Csv -Path C:\output.csv -NoTypeInformation