none
Cкрипт обновления пользователей с помощью CSV RRS feed

  • Вопрос

  • Приветствую, коллеги.

    Уже 2 рабочих дня мучаюсь со скриптом. 

    Задача: имеется большое кол-во пользователей, которым в ближайшее время достаточно регулярно придётся изменять те или иные атрибуты AD. 

    Решение: экспортировать пользователей в ad, изменить параметры в excel, импортировать изменённый csv.

    Проблем со скриптом на экспорт нет. 

    Есть проблема с импортом

    Скрипт на данный момент такой:

    Import-module ActiveDirectory
    $users = Import-Csv "C:\csv\test.csv"
    foreach ($user in $users) {
        $props = @{
            identity    = $user.samaccountname
            givenName   = if($user.FirstName  ){$user.FirstName  }else{$null}
            surname     = if($user.LastName   ){$user.LastName   }else{$null}
            title       = if($user.JobTitle   ){$user.JobTitle   }else{$null}
            description = if($user.description){$user.description}else{$null}
            state       = if($user.State      ){$user.State      }else{$null}
            Office      = if($user.Office     ){$user.Office     }else{$null}
            department  = if($user.Department ){$user.Department }else{$null}
            city        = if($user.City       ){$user.City       }else{$null}
            company     = if($user.company    ){$user.company    }else{$null}
        }
        set-aduser @props
    }

    Ошибка возвращается следующая: 

     

    + ... UserPath = ([adsisearcher]"sAMAccountName=$($_.sAMAccountName)").Find ...
    +                                                 ~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : ArgumentException

    You cannot call a method on a null-valued expression.

    Прошу помочь допилить скрипт, или предложить свой. 

    18 октября 2018 г. 14:19

Ответы

  • попробуйте проверить что в вашем csv у всех пользюков есть samaccountname и что разделителем в файле у вас выступает запятая (у екселя дефолтный разделитель для csv ";"

    далее пробуйте простые запросы по типу get-aduser $user.samaccountname если получите требуемое то дописываете " ... | Set-AdUser @props ну и конечно из $props нужно убрать строку identity


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 30 октября 2018 г. 9:54
    • Предложено в качестве ответа Vector BCOModerator 4 ноября 2018 г. 4:18
    • Помечено в качестве ответа KazunEditor 6 ноября 2018 г. 10:58
    30 октября 2018 г. 9:53
    Модератор

Все ответы

  • Есть подозрения, что в $props нельзя юзать ветвления в определении полей, не говоря уже о том что, что тут делается вообще?:

    if($user.FirstName  ){$user.FirstName  }else{$null}

    И желательно увидеть все что делаете в целом.

    30 октября 2018 г. 9:05
  • попробуйте проверить что в вашем csv у всех пользюков есть samaccountname и что разделителем в файле у вас выступает запятая (у екселя дефолтный разделитель для csv ";"

    далее пробуйте простые запросы по типу get-aduser $user.samaccountname если получите требуемое то дописываете " ... | Set-AdUser @props ну и конечно из $props нужно убрать строку identity


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 30 октября 2018 г. 9:54
    • Предложено в качестве ответа Vector BCOModerator 4 ноября 2018 г. 4:18
    • Помечено в качестве ответа KazunEditor 6 ноября 2018 г. 10:58
    30 октября 2018 г. 9:53
    Модератор