Использование PowerShell для запроса Active Directory и добавления данных в новый столбец существующего CSV - PullRequest
1 голос
/ 10 апреля 2020

У меня есть CSV с сотнями имен пользователей. В PowerShell я хотел бы запустить Get-ADUser и вывести их DisplayName в соседней ячейке. Я также хочу сохранить всю другую информацию в правильных строках и убедиться, что в AD не найдены какие-либо имена пользователей, что вывод не записывает следующие DisplayName не в порядке. Может ли кто-нибудь помочь мне понять это? Я относительно новичок в PowerShell и очень плохо знаком с его использованием для модификации Excel.

Для конфиденциальности, скажем, моя таблица выглядит следующим образом:

Users

Это то, что у меня есть до сих пор ...

$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
}

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020
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

Выше я предполагаю, что "Последний вход в систему" в вашей электронной таблице - это samaccountname каждого пользователя. Предпринятые шаги:

  • Импорт исходного csv
  • Для каждого l oop мы присваиваем каждое значение из каждой строки переменной
  • Для нашего нового столбца "displayname "мы используем командлет get-aduser вместе с информацией samaccountname из нашего csv
  • Создаем psobject для хранения этой информации из переменных
  • Затем мы используем Select-Object, чтобы выбрать порядок заголовков электронных таблиц перед передачей его на export-csv для создания нашего обновленного csv
0 голосов
/ 10 апреля 2020

Пожалуйста, используйте приведенный ниже скрипт, если у вас есть 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
    #>

}

Надеюсь, это поможет.

...