如何在PowerShell中将输出添加/组合到现有数组?

时间:2013-03-01 12:44:00

标签: powershell

我的$file包含两列。使用.中的用户名,我想分别添加namegivenname作为第三和第四列。到目前为止,我有:

$file = Import-Csv H:\computers2userswoSP1.csv
$out = foreach ($o in $file.name) {
    Get-ADUser $o | select name, givenname
}

我尝试将以下代码添加到第一个foreach中,但这不起作用:

foreach ($r in $out) {
    New-Object PSObject -prop @{
        name = $file.fullname
        givenname = $file.Firstname
    }
}

并在循环之前添加它:

Add-Member -InputObject $file -TypeName fullname
Add-Member -InputObject $file -TypeName Firstname

在循环中使用它:

$out.givenname += $file.FirstName
$out.name += $file.

正如你所看到的,我在黑暗中拍摄了一点。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

导入文件,选择管道,选择其所有属性并再添加两个属性。这将创建空白属性,您可以在循环内更新。

导入命令(Import-Csv)在括号中,因此您可以更新文件。没有它,该文件将被使用,更新将失败。

但有一件事。看起来你的文件中已经有了一个Name列,所以我将新属性命名为'fullname'。

(Import-Csv H:\computers2userswoSP1.csv | select *, Name, GivenName) | ForEach-Object{
    $user = Get-ADUser $_.name | select fullname, givenname
    $_.fullname = $user.name
    $_.givenname = $user.firstname
    $_
} | Export-Csv H:\computers2userswoSP1.csv

答案 1 :(得分:1)

如果我正确阅读了您的意图,您希望根据Import-Csv的数据为AD生成的每个对象添加两个属性。如果是这种情况,您可以执行以下操作(此处Import-CsvConvertFrom-Csv模拟):

@'
username,fullname
bielawb,"Bartek Bielawki"
fasolaj,"Jas Fasola"
'@ | ConvertFrom-Csv | foreach {
    $AD = Get-ADUser -Identity $_.username
    New-Object PSObject -Property @{
        UserName = $_.username
        FullName = $_.fullname
        Name = $AD.Name
        GivenName = $AD.GivenName
    }
}

CSV中的数据无关紧要;如果字段与您在CSV中的字段不匹配,则只需更新New-Object语法中的值。