我想做的是从具有UserPrincipalnames的csv文件中导入数据,并在@符号前输入名称,然后将数据导出到同一CSV文件中的特定列中,情况是o365Users.csv。我可以将其写到文本文件中,但是我需要知道如何将其导出到标题为SAM的G列中
这是我的代码:
$Addys = Import-Csv "C:\scripts\o365Users.csv"
$UPNs = $Addys.UserPrincipalName
foreach ($UPN in $UPNs) {
$Name = $UPN.Split("@")[0]
Write-Output $Name >> c:\scripts\o365Names.txt
}
答案 0 :(得分:1)
要附加标题为SAM
的新列,请使用带有计算属性的Select-Object
:
(Import-Csv 'C:\scripts\o365Users.csv') |
Select-Object -Property *,@{n='SAM';e={$_.UserPrincipalName.Split('@')[0]}}
如果新属性必须位于特定位置,则不能使用通配符*
,但必须按所需顺序枚举所有标头/列/属性,即
(Import-Csv 'C:\scripts\o365Users.csv') |
Select-Object -Property ColA,ColB,ColC,ColD,ColE,ColF,@{n='SAM';e={$_.UserPrincipalName.Split('@')[0]}},ColH
用真实的标题替换Col_
。
由于将(Import-Csv)
括在括号中,因此可以导出为相同的文件名(在测试时不建议使用)-只需追加
| Export-Csv 'C:\scripts\o365Users.csv' -NoTypeInformation
答案 1 :(得分:0)
这里是获取所需输出的一种快速方法。您将导入当前的CSV。创建一个空白输出数组,然后在循环中添加每个名称。然后导出CSV
$Addys = Import-Csv "C:\scripts\o365Users.csv"
$UPNs = $Addys.UserPrincipalName
[System.Collections.ArrayList]$Output = @()
foreach ($UPN in $UPNs) {
$Name = $UPN.Split("@")[0]
$Output.Add($Name) | Out-Null
}
$Output | Export-Csv -Path "C:\scripts\o365Users.csv" -NoTypeInformation