使用 PowerShell 查询 Active Directory 并将数据添加到现有 csv 的新列

Using PowerShell to query Active Directory and add data to new column of existing csv

我有一个 CSV 文件,上面列出了数百个用户名。在 PowerShell 中,我想 运行 Get-ADUser 并在相邻的单元格中输出它们的 DisplayName 。我还想将所有其他信息保留在正确的行中,并确保如果在 AD 中找不到任何用户名,输出不会乱序写入以下 DisplayName。有人可以帮我解决这个问题吗?我对 PowerShell 比较陌生,对使用它修改 Excel 也很陌生。

为了保密起见,假设我的电子表格如下所示:

这是我目前所拥有的...

$userlist = Get-Content $home\Desktop\names.csv

ForEach ($user in $userlist) {
    Get-ADUser $user -Properties DisplayName | 
          Select-Object Name,DisplayName |
          Export-CSV $home\Desktop\new_names.csv -NoTypeInformation
}

如果您有用户的 samaccountname,请使用下面的脚本。 如果您有专有名称,只需注释掉 samaccountname 部分并取消注释专有名称部分。

$userlist = Import-Csv "$home\Desktop\names.csv"

ForEach ($user in $userlist) {

    $SamID_User = $user.SamAccountName
    # $DN_User = $user.DistinguishedName
    $OU_User = $user.OU

    #A Search by SamAccountName
    $result = Get-ADUser -Filter { samaccountname -eq $SamID_User } -SearchBase $OU_User  | # DisplayName property is returned by default by Get-ADUser and hence doesn't require explicit mention
          Select-Object Name,DisplayName

    $result | Export-CSV "$home\Desktop\new_names.csv" -NoTypeInformation -Append # Added -Append switch; works on PS v3.0 and later; with PS v2.0 -Append switch is not available with Export-Csv; With PS v2.0 you can use Out-File instead

    #B Search by DistinguishedName
    <#
    $result = Get-ADUser -Filter { DistinguishedName -eq $DN_User } -SearchBase $OU_User | 
          Select-Object Name,DisplayName
    $result | Export-CSV "$home\Desktop\new_names.csv" -NoTypeInformation -Append
    #>

}

希望对您有所帮助。

Import-CSV $home\Desktop\names.csv |
    ForEach-Object {
      $samAccountname = ""
      $displayname = ""
      $samAccountname = $_."last logon"
      $machinename = $_.'machine name'
      $displayname = (get-aduser $samaccountname -Properties displayname).displayname
      $ou = $_.OU
      [pscustomobject]@{
            machineName=$machinename
            displayname=$displayname 
            OU=$ou 
            samAccountname=$samAccountname 
        }
    } |
    select samAccountname ,machineName,displayname,ou |
    Export-CSV new_names.csv -Append -NoTypeInformation

在上面我假设电子表格中的 "Last Logon" 是每个用户的 samaccountname。采取的步骤:

  • 导入原始csv
  • 在每个循环中,我们将每一行的每个值分配给一个变量
  • 对于我们的新专栏 "displayname",我们使用 get-aduser cmdlet 以及来自我们的 csv
  • 的 samaccountname 信息
  • 创建一个 psobject 来保存来自变量的信息
  • 然后我们使用 Select-Object 来 select 电子表格 headers 的顺序,然后再将其传递给 export-csv 以生成我们更新的 csv