使用现有列在CSV文件中添加新列

ylamdve6  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(91)

我从外部系统收到CSV文件形式的用户帐户列表,并尝试将samAccountname添加到新帐户。
CSV看起来像这样:

Name;Surname;EMail;Company;Position;Department;Manager
Testie;Testface;[email protected];Our Company;His or her Position;A fancy department name;The Manager

字符串
我想做的是添加一个新的列与用户的SamAccountName,这样我就可以正确地使用列表它在我的广告后,到现在为止,我发现半打的方法,但没有一个想做正确的。
我得到的最接近的是有一些代码运行没有错误,但在CSV中没有效果或在CSV文件中的错误效果。我已经尝试了foreachForeach-Object方法,但我不能得到我想要的地方。因为我不是PowerShellMaven,我不能自己解决问题。这里有人可以帮助吗?
这是我的方法之一:

$CSVData = Import-Csv 'C:\test.csv' -Delimiter ';'
foreach ($f in $CSVData) {
    $sam = Get-ADUser -Filter "GivenName -eq '$f.Name' -and SurName -eq '$f.Surname'" | Select-Object -ExpandProperty 'SamAccountName' 

    $CSVData | Select-Object *, @{Name = 'samAccountName'; Expression = { $sam } } 
} | Set-Content 'C:\output.csv'


我可以张贴更多,但我认为这是没有帮助的,我的猜测是,它将不得不重写无论如何。

ars1skjm

ars1skjm1#

你的代码有两个主要问题:
1.不能在language keyword(在本例中为foreach语句)之后使用管道。

  1. '$f.Name''$f.Surname'不能在过滤器字符串中展开,您可以使用子表达式运算符$( )来允许这些值展开,如下所示。
$expression = {
    (Get-ADUser -LDAPFilter "(&(givenName=$($_.Name))(surname=$($_.Surname)))").samAccountName
}
Import-Csv 'C:\test.csv' -Delimiter ';' |
    Select-Object *, @{ N = 'samAccountName'; E = $expression } |
    Export-Csv 'C:\output.csv' -NoTypeInformation

字符串

相关问题