Экспорт пользователей домена в CSV powershell

Экспорт пользователей домена в CSV powershell

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = "LDAP://dc=domain,dc=local"
$objSearcher.Filter = "(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))"
$users = $objSearcher.FindAll()
# Количество учетных записей
$users.Count
$users | ForEach-Object {
   $user = $_.Properties
   New-Object PsObject -Property @{
   Должность = [string]$user.description
   Отдел = [string]$user.department
   Логин = [string]$user.userprincipalname
   Телефон = [string]$user.telephonenumber
   MТелефон = [string]$user.mobile
   Комната = [string]$user.physicaldeliveryofficename
   ФИО = [string]$user.cn
   ФАМ = [string]$user.sn
   ИМЯ = [string]$user.givenname
   ГОРОД = [string]$user.l
   МЫЛО = [string]$user.mail

    }
} | Export-Csv -NoClobber -Encoding Unicode -Path  c:\list_users_act.csv

Экспорт пользователей домена в CSV powershell: 13 комментариев

  1. admin Автор записи

    CSV
    Firstname
    Lastname
    Username

    PS
    $UserList=IMPORT-CSV c:\users.csv
    FOREACH ($Person in $UserList) {
    $Username=$Person.Username
    $Password=$Person.Firstname+$Person.Lastname
    $Name=$Person.Firstname+» «+$Person.Lastname
    $Domain=»@yourdomain.com»
    $UPN=$Username+$Domain
    $HDrive=»\\FS01\dept»
    $OU=»OU=organizationunitofyourchoice,DC=yourdomainhere,DC=com»
    New-ADUser -Name $Name –GivenName $Person.Firstname –Surname $Person.Lastname –DisplayName $Name –SamAccountName $Username -HomeDrive «H:» -HomeDirectory $HDrive –UserPrincipalName $UPN -Path $OU
    Set-ADAccountPassword -Identity $Username -NewPassword (ConvertTo-SecureString -AsPlainText $Password -Force)
    Add-ADPrincipalGroupMembership -Identity $Username -MemberOf «security group a»,»security group b»
    Enable-ADAccount -Identity $Username
    }

  2. Dmitry

    Спасибо за решение, возьму в арсенал, но здесь приведен пример создания пачки пользователей с монтированием сетевого каталога.

    А как будет выглядеть скрипт обновления пользователей с помощью экспортированного и скорректированного в Excel CSV-файла?

    1. admin Автор записи

      Вот на примере скрипта которым я вгонял дату рождения в AD

      fio;dr
      Иванов Иван Иванович;05.05.1932
      Петров Петр Петрович;15.01.1992

      $csv_info = Import-Csv C:\user_dr1.csv
      foreach ($line in $csv_info) {
      $fio=$($line.fio)
      $dr=$($line.dr)
      Write-Host $fio $dr
      $user = Get-ADUser -Filter {displayName -eq $fio}
      if ($user) {
      Set-ADUser $user -Add @{extensionAttribute1=$dr}
      Write-Host $fio $dr
      }
      }

  3. Dmitry

    Не выходит каменный цветок. По шагам:

    Шаг 1 (получаем CSV)

    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = «LDAP://ou=test,dc=xxx,dc=local»
    $objSearcher.Filter = «(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))»
    $users = $objSearcher.FindAll()
    $users.Count
    $users | ForEach-Object {
    $user = $_.Properties
    New-Object PsObject -Property @{
    description = [string]$user.description
    department = [string]$user.department
    userprincipalname = [string]$user.userprincipalname
    telephonenumber = [string]$user.telephonenumber
    physicaldeliveryofficename = [string]$user.physicaldeliveryofficename
    cn = [string]$user.cn
    mail = [string]$user.mail

    }
    } | Export-Csv -NoClobber -Encoding Unicode -Path c:\test911.csv

    Шаг 2

    Внес изменения в csv(обновил телефонный номер)

    department,description,userprincipalname,physicaldeliveryofficename,telephonenumber,mail,cn
    ,,sidorovss@xxx.local,,12321321321,sidorovss@xxx.ru,Сидоров Сидор Сидорович

    Шаг 3 (производим импорт)

    $csv_info = Import-Csv C:\test911.csv
    foreach ($line in $csv_info) {
    $description=$($line.description)
    $department=$($line.department)
    $userprincipalname=$($line.userprincipalname)
    $telephoneNumber=$($line.telephonenumber)
    $physicaldeliveryofficename=$($line.physicaldeliveryofficename)
    $cn=$($line.cn)
    $mail=$($line.mail)
    Write-Host $telephonenumber
    $user = Get-ADUser -Filter {displayName -eq $cn}
    if ($user) {
    Set-ADUser $user -Add @{extensionAttribute1=$telephonenumber}
    Write-Host $telephonenumber
    }
    }

    Шаг 4 (получаю по лбу ошибкой)

    Set-ADUser : Указанное значение или атрибут службы каталогов не существует
    Имя параметра: extensionAttribute1
    C:\xxx\import.ps1:13 знак:11
    + Set-ADUser <<<< $user -Add @{extensionAttribute1=$telephonenumber}
    + CategoryInfo : InvalidArgument: (CN=Сидоров Сидо…=xxx,DC=local:ADUser) [Set-ADUser], ArgumentException
    + FullyQualifiedErrorId : Указанное значение или атрибут службы каталогов не существует
    Имя параметра: extensionAttribute1,Microsoft.ActiveDirectory.Management.Commands.SetADUser

    Куда идти?

  4. admin Автор записи

    Если ты обновляешь атрибут $telephonenumber

    Set-ADUser $user -Replace @{othermobile=$telephonenumber}

    Syntax
    Set-ADUser [-Identity] ADUser ADProperties[…]
    [-AccountExpirationDate DateTime] [-AccountNotDelegated bool]
    [-Add hashtable] [-AllowReversiblePasswordEncryption bool]
    [-AuthType {Negotiate | Basic}][-CannotChangePassword bool]
    [-Certificates hashtable] [-ChangePasswordAtLogon bool]
    [-Clear string[]] [-Credential PSCredential] [-Enabled bool]
    [-Partition string] [-PasswordNeverExpires bool]
    [-PasswordNotRequired bool] [-ProfilePath string]
    [-PassThru] [-Remove hashtable] [-Replace hashtable]
    [-SamAccountName string] [-ScriptPath string]
    [-Server string] [-ServicePrincipalNames hashtable]
    [-SmartcardLogonRequired bool]
    [-TrustedForDelegation bool] [-UserPrincipalName string]
    [-Confirm] [-WhatIf] [CommonParameters]

    Set-ADUser -Instance ADUser [-SamAccountName string]
    [-AuthType {Negotiate | Basic}] [-Credential PSCredential]
    [-Partition string] [-PassThru] [-Server string]
    [-Confirm] [-WhatIf] [CommonParameters]

    Key
    ADProperties
    [-City string] [-Company string] [-Country string]
    [-Department string] [-Description string] [-DisplayName string]
    [-Division string] [-EmailAddress string] [-EmployeeID string]
    [-EmployeeNumber string] [-Fax string] [-GivenName string]
    [-HomeDirectory string] [-HomeDrive string] [-HomePage string]
    [-HomePhone string] [-Initials string] [-LogonWorkstations string]
    [-Manager ADUser] [-MobilePhone string] [-Office string] [-OfficePhone string]
    [-Organization string] [-OtherName string]
    [-POBox string] [-PostalCode string] [-State string] [-StreetAddress string]
    [-Surname string] [-Title string]

    http://ss64.com/ps/set-aduser.html

  5. Dmitry

    Спасибо. Решил через ADSI . Для большего понимания такими же чайниками как я выкладываю обе части Экспорт и Импорт.

    #############
    Экспорт
    #############

    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = «LDAP://ou=test,dc=ydomain,dc=ru»
    $objSearcher.Filter = «(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))»
    $users = $objSearcher.FindAll()
    $users.Count
    $users | ForEach-Object {
    $user = $_.Properties
    New-Object PsObject -Property @{
    samaccountname = [string]$user.samaccountname
    company = [string]$user.company
    department = [string]$user.department
    telephonenumber = [string]$user.telephonenumber
    mail = [string]$user.mail

    }
    } | Export-Csv -NoClobber -Encoding Unicode -Path C:\test.csv

    ###################
    Обработка
    ###################

    Обрабатывается в Excel. Вкладка «данные», потом кнопка «из текста», при добавлении указываем разделитель — запятые. При сохранении csv после обработки указываем Юникод UTF-8.

    ###################
    Импорт
    ###################

    Import-Csv -Path ‘C:\test.csv’ | ForEach-Object {
    $ADUserPath = ([adsisearcher]»sAMAccountName=$($_.sAMAccountName)»).FindOne().Path
    $ADuser = [adsi]$ADUserPath
    $ADUser.Put(«department»,$_.department)
    $ADUser.Put(«company»,$_.company)
    $ADUser.Put(«telephonenumber»,$_.telephonenumber)
    $ADUser.Put(«mail»,$_.mail)
    $ADUser.psbase.CommitChanges()
    }

    Автору еще раз спасибо.

  6. setler

    Вопрос знатокам. В свойствах учетки пользователя есть закладка Телефоны (Telephones), внизу есть поле notes типа мемо. Как занести туда значения средствами PowerShell?
    PS. В атрибутах нашел название поле «info», но в команде New-ADUser такого параметра нет.
    Спасибо.

  7. Станислав

    Извините за дотошность, но могли бы вы еще раз подробннее описать способ выгрузки пользователей из домена (хотябы дерева) и обратной загрузки в другой домен. Какие файлы создавать, что прописывать и как сохранять.
    Еще интересно занесение информации пользователям, например номера телефонов и кабинетов через скрипты. Заранее большое спасибо откликнувшимся!!!

  8. vasil

    Привет всем. А как подредактировать скрипт чтоб выгружалось только Имя пользователя, почта и guid?

  9. vasil

    Извиняюсь чуть не так, как подредактировать скрипт чтоб выгружалось только Имя пользователя, почта и SID?

  10. Евгений

    Vasil

    Наверно неактуально уже но всё же.

    Get-ADUser -Filter * -SearchBase «OU=users, DC=microsoft, DC=com» | Select Samaccountname, mail, SID|
    Export-CSV «C:\Users\admin\desktop\TEMP.csv» -Encoding Unicode

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Time limit is exhausted. Please reload the CAPTCHA.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.