none
Импорт локальных пользователей из .CSV файла RRS feed

  • Вопрос

  • Здравствуйте! Столкнулся с такой задачей: нужно завести несколько локальных учетных записей в рабочей группе, посредством powershell, при этом, срок действия пароля, должен быть неограниченным, пользователь должен находится в нескольких группах (например: "usrs" и "пользователи удаленного рабочего стола"), а также работать в среде, то есть, при входе в систему, запускать программу (например "C:\Windows\system32\notepad.exe")

    Проблема в том, что с созданием пользователей и установкой атрибута на неограниченный срок действия пароля, проблем нет, (помогла страница с англоязычного форума technet) то с вводом в группу и указанием среды, ничего не получается.

    Могли бы Вы помочь дописать имеющийся скрипт?

    Сам скрипт:

    $Users = Import-Csv C:\file.csv

    $Users | % {
    $computer = [ADSI]"WinNT://."

    $user = $computer.Create("User",$_.userid)

    $user.setpassword($_.password)
    $user.put("description",$_.'full name')
    $user.SetInfo()
    }
    $User.UserFlags[0] = $User.UserFlags[0] -bor 0x10000  #ADS_UF_DONT_EXPIRE_PASSWD flag is 0x10000

    $User.SetInfo()

    .csv выглядит так:

    Full Name,password,userid

    Primer Primerov,password,P.Primerov

    24 апреля 2018 г. 9:52

Ответы

  • Добрый день!

    $csv = Import-Csv C:\1\1.txt -Delimiter ","
    [adsi]$computer = "WinNT://$env:COMPUTERNAME"
    $csv | Foreach {
        $user = $computer.Create("User", $_.UserId)
        $user.Put("PasswordExpired", 1)
        $user.SetPassword($_.password)
        $user.Put("Description", $_.'Full Name')
        $user.SetInfo()
        $lgroup = "Гости", "Администраторы"
        Foreach ($lg in $lgroup) {
            $wla = ([ADSI]"WinNT://$env:computername/$lg,group").Name
            [adsi]$group = "WinNT://$env:COMPUTERNAME/$wla, group"
            $group.Add($user.Path)
        }
    }

    Что касается запуска программ при старте, то посмотрите вот этот пример


    • Изменено Sergey Ya 24 апреля 2018 г. 10:31 $_.'Full Name'
    • Предложено в качестве ответа Vector BCOModerator 24 апреля 2018 г. 11:12
    • Помечено в качестве ответа KazunEditor 27 апреля 2018 г. 5:24
    24 апреля 2018 г. 10:15
  • 1. Группы в файле разделяем при помощи ; иначе ($_.groups).Split(";") не сработает

    $csv = Import-Csv C:\1\1.txt -Delimiter "," -Encoding Default
    [adsi]$computer = "WinNT://$env:COMPUTERNAME"
    $csv | Foreach {
        $user = $computer.Create("User", $_.UserId)
        $user.Put("PasswordExpired", 1)
        $user.SetPassword($_.password)
        $user.Put("Description", $_.'Full Name')
        $user.SetInfo()
        Foreach ($lg in ($_.groups).Split(";")) {
            $wla = ([ADSI]"WinNT://$env:computername/$lg,group").Name
            [adsi]$group = "WinNT://$env:COMPUTERNAME/$wla, group"
            $group.Add($user.Path)
        }
    }


    2. Если вы хотите заменить explorer.exe на свою программу, то в идеале это выглядит следующим образом: Создаем учетные записи в домене; создаем GPO с параметром Конфигурация пользователя/Шаблоны администрирования/Система/Настраиваемый интерфейс пользователя и подставляем свою программу; линкуем эту политику к пользователю и терминальному серверу.

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

    PS Если у вас есть сервер с ролью RDS, то будет проще опубликовать нужно вам ПО



    • Изменено Sergey Ya 24 апреля 2018 г. 12:08
    • Помечено в качестве ответа KazunEditor 27 апреля 2018 г. 5:25
    24 апреля 2018 г. 12:01

Все ответы

  • Добрый день!

    $csv = Import-Csv C:\1\1.txt -Delimiter ","
    [adsi]$computer = "WinNT://$env:COMPUTERNAME"
    $csv | Foreach {
        $user = $computer.Create("User", $_.UserId)
        $user.Put("PasswordExpired", 1)
        $user.SetPassword($_.password)
        $user.Put("Description", $_.'Full Name')
        $user.SetInfo()
        $lgroup = "Гости", "Администраторы"
        Foreach ($lg in $lgroup) {
            $wla = ([ADSI]"WinNT://$env:computername/$lg,group").Name
            [adsi]$group = "WinNT://$env:COMPUTERNAME/$wla, group"
            $group.Add($user.Path)
        }
    }

    Что касается запуска программ при старте, то посмотрите вот этот пример


    • Изменено Sergey Ya 24 апреля 2018 г. 10:31 $_.'Full Name'
    • Предложено в качестве ответа Vector BCOModerator 24 апреля 2018 г. 11:12
    • Помечено в качестве ответа KazunEditor 27 апреля 2018 г. 5:24
    24 апреля 2018 г. 10:15
  • Спасибо! Всё получилось.

    Однако есть пара нюансов:

    1) в Вашем варианте, группы нужно указывать в консоли powershell, а нельзя ли прописать импорт групп из самого .txt или .csv файла? Если это возможно, то что нужно прописать в строке ввместе с "Full Name,password,userid" ?

    2) в указанном Вами примере запуска программ при старте, ссылка на статью с созданием задания в планировщике. Мне нужно немного другое.

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

    Как в свойствах учетной записи (локальные пользователи), в консоли управления компьютера (compmgmt.msc), в которой можно поставить чекбокс на вкладке "при входе в систему запускать следующую программу".


    24 апреля 2018 г. 11:21
  • 1. Группы в файле разделяем при помощи ; иначе ($_.groups).Split(";") не сработает

    $csv = Import-Csv C:\1\1.txt -Delimiter "," -Encoding Default
    [adsi]$computer = "WinNT://$env:COMPUTERNAME"
    $csv | Foreach {
        $user = $computer.Create("User", $_.UserId)
        $user.Put("PasswordExpired", 1)
        $user.SetPassword($_.password)
        $user.Put("Description", $_.'Full Name')
        $user.SetInfo()
        Foreach ($lg in ($_.groups).Split(";")) {
            $wla = ([ADSI]"WinNT://$env:computername/$lg,group").Name
            [adsi]$group = "WinNT://$env:COMPUTERNAME/$wla, group"
            $group.Add($user.Path)
        }
    }


    2. Если вы хотите заменить explorer.exe на свою программу, то в идеале это выглядит следующим образом: Создаем учетные записи в домене; создаем GPO с параметром Конфигурация пользователя/Шаблоны администрирования/Система/Настраиваемый интерфейс пользователя и подставляем свою программу; линкуем эту политику к пользователю и терминальному серверу.

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

    PS Если у вас есть сервер с ролью RDS, то будет проще опубликовать нужно вам ПО



    • Изменено Sergey Ya 24 апреля 2018 г. 12:08
    • Помечено в качестве ответа KazunEditor 27 апреля 2018 г. 5:25
    24 апреля 2018 г. 12:01