0

我要做的是从具有 UserPrincipalnames 的 csv 文件中导入数据,并且在 @ 符号之前使用名称,然后我想将该数据导出到同一 CSV 文件中的特定列,在这种情况下是 o365Users .csv。我可以将其写入文本文件,但我需要知道如何将其导出到 G 列,标题名称为 SAM

这是我的代码:

$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
 }
4

2 回答 2

1

要使用计算属性附加带有标题的新列:SAMSelect-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

于 2018-09-21T15:20:13.240 回答
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
于 2018-09-21T14:26:06.200 回答