Экспорт пользователей домена в 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 обратно в AD?
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
}
Спасибо за решение, возьму в арсенал, но здесь приведен пример создания пачки пользователей с монтированием сетевого каталога.
А как будет выглядеть скрипт обновления пользователей с помощью экспортированного и скорректированного в Excel CSV-файла?
Вот на примере скрипта которым я вгонял дату рождения в 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
}
}
Не выходит каменный цветок. По шагам:
Шаг 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
Куда идти?
Если ты обновляешь атрибут $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
Спасибо. Решил через 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()
}
Автору еще раз спасибо.
Вопрос знатокам. В свойствах учетки пользователя есть закладка Телефоны (Telephones), внизу есть поле notes типа мемо. Как занести туда значения средствами PowerShell?
PS. В атрибутах нашел название поле «info», но в команде New-ADUser такого параметра нет.
Спасибо.
SET-ADUSER ivan.ivanov –add @{info=”TEST”}
SET-ADUSER ivan.ivanov –replace @{info=”TEST”}
Извините за дотошность, но могли бы вы еще раз подробннее описать способ выгрузки пользователей из домена (хотябы дерева) и обратной загрузки в другой домен. Какие файлы создавать, что прописывать и как сохранять.
Еще интересно занесение информации пользователям, например номера телефонов и кабинетов через скрипты. Заранее большое спасибо откликнувшимся!!!
Привет всем. А как подредактировать скрипт чтоб выгружалось только Имя пользователя, почта и guid?
Извиняюсь чуть не так, как подредактировать скрипт чтоб выгружалось только Имя пользователя, почта и SID?
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
Подскажите пожалуйста почему таблица не импортируеся в цикл? Вне цикла всёок и после цикла переменная выводит содержимое таблицы, а в цикле ничего не происходит и ошибок никаких нет foreac($i in $ret) {$lay=Import-csv -path C:\list.csv; $lay}