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

问题描述

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

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

我想使用管道格式列表名称、universalprincipalname 对每个名称运行 get-user 命令,然后将其输出一个文件

我试过了:

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 的标题为 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 的对象将被重新创建为类型为 FormatEntryData 的新对象,而您不会 strong> 如果您的意图是导出数据,则需要。