Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблема с заполнение атрибутов AD (http://forum.oszone.net/showthread.php?t=326114)

Johny_spb 20-04-2017 09:21 2730875

Проблема с заполнение атрибутов AD
 
Вложений: 1
Доброе время суток!!

Есть скрипт для заполнения данных в 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,extensionAttribute13,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,extensionAttribute13,extensionAttribute14
        }
}
catch {"Error found"}

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

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

Kazun 20-04-2017 09:29 2730877

В 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 2730880

Код:

try {$users = Import-Csv C:\temp\user.csv -Delimiter ";" -Encoding Default | Where Name}
Если сделать в таком варианте, то он не находит файл. Или я что то напутал?

Kazun 20-04-2017 10:00 2730888

Обновить версию 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 2730928

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

Kazun 20-04-2017 11:43 2730931

Логично, что таких полей в 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 2730942

Точно, с тупил пока игрался на старой версии поменял, а обратно не сделал =)) Спасибо огромное!!!!


Время: 11:28.

Время: 11:28.
© OSzone.net 2001-