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

问题描述 投票:0回答:1

我从外部系统收到 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'

我可以发布更多内容,但我认为这没有帮助,我的猜测是无论如何都必须重写。

powershell csv active-directory
1个回答
0
投票

您的代码有两个主要问题:

  1. 您无法在 语言关键字之后使用管道,在本例中为

    foreach
    语句。

  2. '$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
© www.soinside.com 2019 - 2024. All rights reserved.