我从外部系统收到 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
的新列,以便我稍后可以在我的 AD 中正确使用该列表。到目前为止,我找到了六种方法,但没有一个愿意正确执行。
我得到的最接近的是运行一些代码,没有错误,但在 CSV 中没有效果,或者在 CSV 文件中效果错误。我尝试过
foreach
和 Foreach-Object
方法,但我无法到达我想要的地方。由于我不是 PowerShell 专家,因此我无法自行排除故障。这里有人可以帮忙吗?
这是我的方法之一:
$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'
我可以发布更多内容,但我认为这没有帮助,我的猜测是无论如何都必须重写。
您的代码有两个主要问题:
您无法在 语言关键字之后使用管道,在本例中为
foreach
语句。
'$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