我的$file
包含两列。使用.
中的用户名,我想分别添加name
和givenname
作为第三和第四列。到目前为止,我有:
$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.
正如你所看到的,我在黑暗中拍摄了一点。有什么建议吗?
答案 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-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
语法中的值。