3

我的$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.

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

4

2 回答 2

2

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

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

不过有一件事。看起来您的文件中已经有一个名称列,因此我将新属性命名为“全名”。

(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
于 2013-03-01T17:11:32.577 回答
1

如果我正确地阅读了您的意图,您希望Import-Csv根据来自AD的数据为每个生成的对象添加两个属性。如果是这种情况,您可以执行以下操作(此处Import-Csv由 模拟ConvertFrom-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语法中的值。

于 2013-03-01T13:47:04.363 回答