Войти

Показать полную графическую версию : [решено] Проблема с заполнение атрибутов AD


Johny_spb
20-04-2017, 09:21
Доброе время суток!!

Есть скрипт для заполнения данных в AD

Import-Module ActiveDirectory

cls

try {$users = Import-Csv C:\temp\user.csv -Delimiter ";"}
catch {"Cant load file C:\temp\user.csv"}

try {
foreach ($user in $users) {
$name=$user.name
$title=$user.title
$department=$user.Department
$company=$user.company
$ext10=$user.Ext10
$ext11=$user.Ext11
$ext12=$user.Ext12
$ext13=$user.Ext13
$ext14=$user.Ext14

Get-ADUser -Filter {name -eq $name} -SearchBase "OU=Company,DC=com,DC=tu,DC=RU" -Properties name,title,Department,company,extensionAttribute10,extensionAttribute11,extensionAttribute12,extensi onAttribute13,extensionAttribute14

$tuser = Get-ADUser -Filter {name -eq $name} -SearchBase "OU=Company,DC=com,DC=tu,DC=RU"
if ($tuser -notlike $null){
$SAN = $tuser.SamAccountName

if ($department -notlike ''){
Set-ADUser $SAN -replace @{Department=$department}
}
if ($company -notlike ''){
Set-ADUser $SAN -replace @{company=$company}
}
if ($title -notlike ''){
Set-ADUser $SAN -replace @{title=$title}
}
if ($ext10 -notlike ''){
Set-ADUser $SAN -replace @{extensionAttribute10=$ext10}
}
if ($ext11 -notlike ''){
Set-ADUser $SAN -replace @{extensionAttribute11=$ext11}
}
if ($ext12 -notlike ''){
Set-ADUser $SAN -replace @{extensionAttribute12=$ext12}
}
if ($ext13 -notlike ''){
Set-ADUser $SAN -replace @{extensionAttribute13=$ext13}
}
if ($ext14 -notlike ''){
Set-ADUser $SAN -replace @{extensionAttribute14=$ext14}
}
}
Write-Host "User $name Changed!!!"
Write-Host ""
Write-Host ""
Get-ADUser $SAN -Properties name,title,Department,company,extensionAttribute10,extensionAttribute11,extensionAttribute12,extensi onAttribute13,extensionAttribute14
}
}
catch {"Error found"}

Есть файл актуализации данных, сохраненный из Excel в формате csv с разделителями(Во вложении)

Помогите, не понимаю в какой кодировке необходимо сохранить файл или как добавить перекодировку в скрипт, что бы данные на русском языке нормально загружались в AD а то сейчас идет "??????????????????" Как это поправить?

Kazun
20-04-2017, 09:29
В Excel сохранить как - выбрать CSV UTF-8 (разделитель-запятая)(*.csv) или любой другой редактор в UTF-8(notepad - сохранить как - Кодировка UTF-8).

Если PowerShell 3+, можно указать кодировку для файла, для вашего примера:

PS > Import-csv user.csv -Delimiter ";" -Encoding Default | Where Name


name : 40TestTT
title : Старший
Department : Российской Федерации
company : Компания
extensionAttribute10 : ТЕРРИТОРИАЛЬНЫЕ УЧРЕЖДЕНИЯ
extensionAttribute11 : СЕВЕРО-ЗАПАДНОЕ
extensionAttribute12 : Северо-Западного
extensionAttribute13 : Отдел
extensionAttribute14 : Сектор

name : 40TestTT01
title : Старший
Department : Российской Федерации
company : Компания
extensionAttribute10 : ТЕРРИТОРИАЛЬНЫЕ УЧРЕЖДЕНИЯ
extensionAttribute11 : СЕВЕРО-ЗАПАДНОЕ
extensionAttribute12 : Северо-Западного
extensionAttribute13 : Отдел
extensionAttribute14 : Сектор

Johny_spb
20-04-2017, 09:43
try {$users = Import-Csv C:\temp\user.csv -Delimiter ";" -Encoding Default | Where Name}

Если сделать в таком варианте, то он не находит файл. Или я что то напутал?

Kazun
20-04-2017, 10:00
Обновить версию PowerShell до актуальной. На данный момент, я думаю версия V2, где нет таких параметров -Encoding Default и нового функционала Where Name.

Посмотреть версию:

$PSVersionTable.PSVersion


Подробнее про ошибку , выполнить в консоли:
Import-Csv C:\temp\user.csv -Delimiter ";" -Encoding Default | Where Name

PS. Если не обновлять PowerShell, а использовать V2, тогда пересохранить csv файл в кодировке - UTF8 и использовать скрипт в первоначальном виде.

Johny_spb
20-04-2017, 11:40
Версию обновил до 4. Теперь Encoding работает. Вот только почему то не заносит данные в атрибуты extensionAttribute10,extensionAttribute11,extensionAttribute12,extensionAttribute13,extensionAttribu te14 =(

Kazun
20-04-2017, 11:43
Логично, что таких полей в csv файле -нет.
$ext10=$user.Ext10
$ext11=$user.Ext11
$ext12=$user.Ext12
$ext13=$user.Ext13
$ext14=$user.Ext14

И посмотреть в консоли, все ли правильно:

Import-Csv C:\temp\user.csv -Delimiter ";"

Johny_spb
20-04-2017, 12:11
Точно, с тупил пока игрался на старой версии поменял, а обратно не сделал =)) Спасибо огромное!!!!




© OSzone.net 2001-2012