PowerShell - 导入 CSV、读取列值、使用列值查询 AD、使用查询的 AD 值添加新列

PowerShell - Import CSV, Read Column Value, Use Column Value to Query AD, Add New columns with Queried AD Values

我有一个包含以下 header 名称的 CSV 文件:

姓名、日期、所有者

我想使用 PowerShell

  1. 导入包含 header 值“名称”、“日期”、“所有者”、“额外”的 File1.csv
  2. 读取“所有者”列(包含 samaccountnames)并使用它来查询 AD 以查找与每个用户关联的“部门、分部”属性。
  3. 创建两个名为“部门”和“部门”的新列,然后将 CSV 导出到新的 CSV (file2.csv)

这是我目前的代码:

$file1 = Import-csv -path "C:\temp\File1.csv"
ForEach ($record in $file1) {
    $getAttributes = Get-ADUser -Filter $record.Owner | Select-Object division,department
    $record | Add-Member -MemberType NoteProperty -Name "Division" -Value $getAttributes.Division
    $record | Add-Member -MemberType NoteProperty -Name "Department" -Value $getAttributes.Department
    $record | Export-Csv -Path C:\temp\file2.csv -Encoding UTF8 -NoTypeInformation -Append
}

我尝试了不同的变体,但到目前为止没有任何效果。如有任何帮助,我们将不胜感激!

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

  1. -Filter $record.Owner 不是 ActiveDirectory Filter.
  2. 的有效语法
  3. Get-ADUser return 具有属性 Department 和 Division 的对象,除非您特别要求查询它们 (-Properties Department, Division).
Import-csv -Path "C:\temp\File1.csv" | ForEach-Object {
    $usr = Get-ADUser -LDAPFilter "(samaccountname=$($_.Owner))" -Properties Department, Division
    if(-not $usr) {
        # if the user could not be found skip it
        Write-Warning "'$($_.Owner)' could not be found..."
        return
    }
    # recreate this object (`$_`) with 2 new properties, `Division` and `Department`
    $_ | Select-Object *, @{N='Division';E={$usr.Division}}, @{N='Department';E={$usr.Department}}
} | Export-Csv -Path C:\temp\file2.csv -Encoding UTF8 -NoTypeInformation