Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Импорт из CSV в AD с помощью PowerShell

Ответить
Настройки темы
PowerShell - [решено] Импорт из CSV в AD с помощью PowerShell

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: rox33
Дата: 04-07-2012
Добрый день!
Такая задача стоит:
Из файла .csv (составленного сторонним софтом) импортировать в ActiveDirectory изменения в списоке пользователей, заменяя устаревшую информацию (телефоны, должности) в AD. Новых юзверей создавать не надо. Только менять несоответствующую информацию.
Т.е. есть файл типа:
читать дальше »
displayName;mail;TelephoneNumber;mobile;homephone
Иван Иваныч;ivan.ivanich@test.ru;135;8(921)555-55-55;302

В AD есть пользователь Иван Иваныч, с неправильным или пустым email, телефоном и т.п.
Нужно, чтобы программа меняла данные в AD, при несовпадении с данными из csv.

Долго бьюсь, читал много в интернетах - пока что не получается. Пробовал
вот эту тему , подправим под себя (как умел), не помогло.
Может кто готовое решение показать?

Отправлено: 17:57, 03-07-2012

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Приведите результат скрипта с тестовым пользователем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:47, 20-07-2012 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Исключеие при вызове "SetInfo" с "0" аргументами: "Для службы каталогов указан недопустимый синтаксис атрибута."
C:\modlog.ps1:28 знак:29
+ $objuser.SetInfo <<<< ()
+CategoryInfo : NotSpecified: (:) [],MethodInvocationException
+FullyQualifiedErrorId:CatchFromBaseAdapterMethodInvokeTI
Скрипт:
читать дальше »
Код: Выделить весь код
$users = Import-Csv c:\list10.csv -Delimiter ";"
$props = $users | Get-Member -MemberType NoteProperty | Select -Expand name

foreach ($user in $users)
{
Try{
      $objuser = ([adsisearcher]"(mail=$($user.mail))").FindOne().GetDirectoryEntry()
}
Catch {
continue
}
      $props | Foreach {
            $prop = $_.ToLower()
            $log = New-Object Text.StringBuilder
            $oldprop = $objuser.InvokeGet($prop)
            if ($user.$prop -ne $oldprop)
            {
                  $objuser.Put("$prop",$user.$prop)
                  $text = "{0} : old {1} new {2} - {3}" -f $objuser.displayname[0],$oldprop,$user.$prop,(Get-Date)
                  $log.AppendLine($text) | Out-Null
            }
      }
      try {
            $objuser.SetInfo()
            $log.ToString() | Out-File c:\result.txt -Append
      }
      catch {
            $_
      }
}


csv:
читать дальше »

mail;company;title;physicalDeliveryOfficeName;homephone;Telephonenumber;ipphone;mobile
test@test.ru;test;tester;;133;89999999;;112399

Отправлено: 13:00, 20-07-2012 | #22


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$users = Import-Csv c:\list10.csv -Delimiter ";"
$props = $users | Get-Member -MemberType NoteProperty | Select -Expand name

foreach ($user in $users)
{
	Try{
	      $objuser = ([adsisearcher]"(mail=$($user.mail))").FindOne().GetDirectoryEntry()
	}
	
	Catch {
		continue
	}
    
	$log = New-Object Text.StringBuilder
	
	$props | Foreach {
            $prop = $_.ToLower()
            $oldprop = $objuser.InvokeGet($prop)
            if ($user.$prop -ne $oldprop -and $user.$prop)
            {
                $objuser.Put("$prop",$user.$prop)
                $text = "{0} : old {1} new {2} prop {3} - {4}" -f $objuser.name[0],$oldprop,$user.$prop,$prop,(Get-Date)
                $log.AppendLine($text) | Out-Null
            }
      }
    
	Try {
       $objuser.SetInfo()
	   if($log.ToString())
	   {
	   		$log.ToString() | Out-File C:\result.txt -Append
	   }
    }
    Catch {
        $_
    }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 20-07-2012 | #23


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всё, теперь код, под мои условия, - ИДЕАЛЕН!!!
ОГРОМНОЕ СПАСИБО!

Отправлено: 15:45, 20-07-2012 | #24



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Импорт из CSV в AD с помощью PowerShell

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - Импорт XML в SQL u_ku_shu Программирование и базы данных 8 22-07-2012 17:47
PowerShell - PowerShell bort-747 Скриптовые языки администрирования Windows 0 10-04-2012 11:29
PowerShell - Импорт пользователей с помощью POwerShell и CSV файла. Temafet Скриптовые языки администрирования Windows 19 18-01-2012 16:45
Система - Windows PowerShell shoot Программное обеспечение Windows 13 27-11-2011 02:23
Разное - PowerShell Butunin Klim Программирование и базы данных 1 31-07-2008 18:39




 
Переход