如何在PowerShell中将数据导出到csv文件中的特定列

时间:2018-09-21 13:52:59

标签: powershell csv export-csv

我想做的是从具有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
 }

2 个答案:

答案 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