Powershell:从列表 (CSV) 运行 中提取命令并输出到不同的 CSV

Powershell: Pulling from a list (CSV) running a command and outputting to a different CSV

对较重的 powershell 非常陌生,我整天都在研究这个,但无法弄清楚。

我需要从 Office 365 帐户获取 UPN 列表。我有一个 CSV 文件中的名称。它只有一列,有一长串名字。标题是“姓名”

我想 运行 get-user 命令针对每个带有管道 format-list 名称、universalprincipalname 的名称,然后将其输出到新文件。

我试过这个:

get-content "m:\filename.csv" | 
foreach {get-user '$_.user' -identity -resultsize unlimited} |
format-list name, userprincipalname |
out-file -FilePath m:\newfilename.csv

但是没有用(我也用import-csv试过了)。它似乎不是从我的列表中提取,而是直接从 office365 交换服务器中提取,当它最终完成时,其中的名字比我列表中的多得多。

我的总体目标是为所有没有拥有移动设备和帐户的人生成一个 upns 列表,这样我就可以使用 powershell 命令来禁用活动同步和用于移动设备的 OWA。不幸的是,我用来生成用户列表的命令以名字、姓氏格式生成了列表……我们有这么多用户,我不能只将 excel 中的东西连接起来,因为会有一大堆错误。

CSV 格式如下:

Column1  
name   
first last  
first last  
first last  
first last   

假设 CSV 的 header 是 Name,代码应该如下所示:

Import-Csv "m:\filename.csv" | ForEach-Object {
    Get-User -Identity $_.Name.Trim() -ResultSize Unlimited
} | Select-Object Name, UserPrincipalName |
Export-Csv "m:\newfilename.csv" -NoTypeInformation

请注意,我使用的是 Select-Object 而不是 Format-Table。您应该只使用 Format-Table 将您的输出显示到 PowerShell 主机,通过管道传递到此 cmdlet 的 object 将被重新创建为 FormatEntryData 类型的新 object如果您的目的是导出数据,您不需要