none
Как можно через PowerShell сменить пароли локальных администраторов на компьютерах в домене? RRS feed

  • Вопрос

  • Хочу сменить пароли на компах в домене скриптом:  
    Код:

    $computers = Get-Content C:\computers.txt
    $user = "Администратор"
    $Password = "sdfgdfgh"
    Foreach($computer in $computers)
    {
     if(Test-Connection "$computer" -Count 1 -quiet)
     {
     $computer = ($computer).ToString()
     $user = [adsi]"WinNT://$computer/$user,user"
     $user.SetPassword($Password)
     $user.SetInfo()
     Write-Host "$computer"
     }
    }


    файл computers.txt  - содержит в столбик имена компов, без пробелов. 

    Выдается постоянно ошибка:
    При получении элемента "SetPassword" произошло следующее исключение: "Не найдено имя пользователя.
    "
    C:\Install\temp.ps1:10 знак:2
    +  $user.SetPassword($Password)
    +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (Very Happy[], ExtendedTypeSystemException
        + FullyQualifiedErrorId : CatchFromBaseGetMember

    При получении элемента "SetInfo" произошло следующее исключение: "Не найдено имя пользователя.
    "
    C:\Install\temp.ps1:11 знак:2
    +  $user.SetInfo()
    +  ~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (Very Happy[], ExtendedTypeSystemException
        + FullyQualifiedErrorId : CatchFromBaseGetMember



    Если в начале скрипта 
    вместо считывания имен компов использовать конкретные имена:
     
    Код:
    $computers = "COMPUTERNAME"  (или любое другое имя компа)


    то ошибки нет - все ок, но как на сотне компах это сделать?
    3 июля 2014 г. 10:39

Ответы

  • Посмотрите вот эту статью. Вообще там идет речь о небезопасности задания паролей через групповые политики, но вам может пригодиться предложенное там обходное решение.

    Посмотрите функцию Invoke-PasswordRoll, она генерирует уникальные пароли для компьютеров из списка и затем сохраняет в файл.


    Microsoft Certified Do Nothing Expert

    • Помечено в качестве ответа KazunEditor 7 июля 2014 г. 4:23
    3 июля 2014 г. 11:04
  • Небольшая невнимательность в вашем скрипте:

    $user = "Администратор" - Определяем имя в переменную $user
    ..... 
    $user = [adsi]"WinNT://$computer/$user,user"  - А здесь создаем новый объект и перезаписываем предыдущее имя пользователя в переменной $user на объект типа ComObject.

    Поэтому измените название переменной в одном из мест.

    $luser = "Администратор" - Определяем имя

     

    • Помечено в качестве ответа KazunEditor 7 июля 2014 г. 4:23
    Отвечающий

Все ответы

  • Посмотрите вот эту статью. Вообще там идет речь о небезопасности задания паролей через групповые политики, но вам может пригодиться предложенное там обходное решение.

    Посмотрите функцию Invoke-PasswordRoll, она генерирует уникальные пароли для компьютеров из списка и затем сохраняет в файл.


    Microsoft Certified Do Nothing Expert

    • Помечено в качестве ответа KazunEditor 7 июля 2014 г. 4:23
    3 июля 2014 г. 11:04
  • Небольшая невнимательность в вашем скрипте:

    $user = "Администратор" - Определяем имя в переменную $user
    ..... 
    $user = [adsi]"WinNT://$computer/$user,user"  - А здесь создаем новый объект и перезаписываем предыдущее имя пользователя в переменной $user на объект типа ComObject.

    Поэтому измените название переменной в одном из мест.

    $luser = "Администратор" - Определяем имя

     

    • Помечено в качестве ответа KazunEditor 7 июля 2014 г. 4:23
    Отвечающий