Создать пользователя windows скрипт

Для управления локальными пользователями и группами в Windows можно использовать встроенный PowerShell модуль Microsoft.PowerShell.LocalAccounts. С помощью этого модуля вы можете создать или удалить локального пользователя, создать новую группу безопасности и добавить в нее пользователей. Этот модуль доступен во всех версиях Windows, начиная с Windows Server 2016 и Windows 10. В предыдущих версиях Windows этот модуль устанавливается вместе с Windows Management Framework 5.1 при обновлении версии PowerShell.

Содержание:

  • Создать нового локального пользователя с помощью PowerShell
  • Управление локальными пользователями Windows из PowerShell
  • Используем PowerShell для управления локальными группам

Полный список командлетов PowerShell в модуле LocalAccounts можно вывести так:

Get-Command -Module Microsoft.PowerShell.LocalAccounts

Модуль Microsoft.PowerShell.LocalAccounts

  • Add-LocalGroupMember – добавить пользователя в локальную группу
  • Disable-LocalUser – отключить локальную учетную запись
  • Enable-LocalUser – включить учетную запись
  • Get-LocalGroup – получить информацию о локальной группе
  • Get-LocalGroupMember – вывести список пользователей в локальной группе
  • Get-LocalUser – получить информацию о локальном пользователе
  • New-LocalGroup – создать новую локальную группы
  • New-LocalUser – создать нового пользователя
  • Remove-LocalGroup – удалить группу
  • Remove-LocalGroupMember – удалить члена из группы
  • Remove-LocalUser – удалить пользователя
  • Rename-LocalGroup – переименовать группу
  • Rename-LocalUser – переименовать пользователя
  • Set-LocalGroup – изменить группу
  • Set-LocalUser – изменить пользователя

Рассмотрим несколько типовых задач по управлению локальными пользователями и группами на компьютере Windows при помощи PowerShell командлетов из модуля LocalAccounts.

Ранее для управления локальными пользователями и группами в Windows использовалась графическая оснастка Local Users and Groups Management (
lusrmgr.msc
) и команды
net user
,
net localgroup
.

Создать нового локального пользователя с помощью PowerShell

Чтобы быстро создать нового пользователя, выполните команду:

New-LocalUser -Name "TestUser1" -FullName "Test User" -Description "User for tests"

Укажите пароль для нового пользователя:

new-localuser создать локального пользователя в windows с помощью powershell

Если вы хотите использовать командлет New-LocalUser для автоматического создания новых локальных пользователей из скриптов PowerShell, пароль можно задать заранее в коде скрипта. Строку с паролем нужно преобразовать в формат Secure String:

$pass = ConvertTo-SecureString "WinitP@ss321!" -AsPlainText -Force
New-LocalUser -Name TestUser2 -Password $pass

Чтобы сразу добавить пользователя в группу локальных администраторов, выполните команду:

Add-LocalGroupMember -Group Administrators -Member TestUser2

При создании пользователя можно дополнительно использовать следующие параметры:

  • -AccountExpires
    – дату действия учетной записи, при наступлении которого учетная запись будет автоматически отключена (по умолчанию командлет New-LocalUser создает бессрочную учетную запись)
  • -AccountNeverExpires
  • -Disabled
    – отключить учетную запись после создания
  • -PasswordNeverExpires
    – неограниченный срок действия пароля
  • -UserMayNotChangePassword
    – запретить пользователю менять свой пароль

Для создания нового пользователя в домене AD нужно использовать командлет New-ADUser.

Управление локальными пользователями Windows из PowerShell

Чтобы вывести список всех локальных пользователей Windows на текущем компьютере, выполните:

Get-LocalUser

команда powershell get-localuser: вывести локальных пользователей

Как вы видите, на компьютере имеется 7 локальных учетных записей, 4 из которых отключены (Enabled=False) (в том числе встроенный администратор Windows).

Чтобы вывести все свойства конкретной локальной учетной записи (аналог комадлета для получения информации о пользователях из AD — Get-ADUser), выполните:

Get-LocalUser -Name ‘root’ | Select-Object *

AccountExpires         :
Description            :
Enabled                : True
 FullName               :
PasswordChangeableDate : 7/20/2022 12:17:04 PM
PasswordExpires        :
UserMayChangePassword  : True
PasswordRequired       : False
PasswordLastSet        : 7/20/2022 12:17:04 PM
LastLogon              : 5/15/2023 2:01:48 AM
Name                   : root
SID: S-1-5-21-1823742600-3125382138-2640950260-1001
PrincipalSource        : Local
ObjectClass            : User

Обратите внимание на атрибут PrincipalSource. В нем указан тип аккаунта. Это может быть:

  • Локальный пользователь Windows (PrincipalSource: Local)
  • Учетные записи Microsoft (PrincipalSource: Microsoft Account)
  • Учетные записи Azure AD (PrincipalSource: AzureAD)

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

Get-LocalUser -Name ‘root’ | Select-Object PasswordLastSet

Get-LocalUser вывести информацию о локальном пользователе

Чтобы изменить пароль существующего пользователя, выполните команду:

Set-LocalUser -Name TestUser2 -Password $UserPassword –Verbose

Чтобы установить флаг «Срок действия пароля пользователя не истекает» («Password never expired»), выполните:

Set-LocalUser -Name TestUser2 –PasswordNeverExpires $True

Отключить учетную запись:

Disable-LocalUser -Name TestUser2

Включить пользователя:

Enable-LocalUser -Name TestUser2

Чтобы удалить локального пользователя, выполните:

Remove-LocalUser -Name TestUser2 -Verbose

Используем PowerShell для управления локальными группам

Теперь выведем список локальных групп на компьютере:

Get-LocalGroup

Создадим новую группу:

New-LocalGroup -Name 'RemoteSupport' -Description 'Remote Support Group'

Теперь добавим в новую группу несколько локальных пользователей и группу локальных администраторов:

Add-LocalGroupMember -Group 'RemoteSupport' -Member ('SIvanov','root', 'Administrators') –Verbose

Также вы можете добавить пользователя в группы с помощью следующего конвейера (в этом примере мы добавим пользователя в локальную группу, разрешающую ему удаленный доступ к рабочему столу через RDP):

Get-Localuser -Name TestUser2 | Add-LocalGroupMember -Group 'Remote Desktop Users'

Выведем список пользователей в локальной группе:

Get-LocalGroupMember -Group 'RemoteSupport'

В локальную группу могут быть добавлены не только локальные учетные записи (PrincipalSource – Local), но и доменные аккаунты (domain), учетные записи Microsoft (MicrosoftAccount) и аккаунты из Azure (AzureAD).

Get-LocalGroupMember -Group 'RemoteSupport'

Чтобы добавить в локальную группу пользователя из Microsoft или AzureAD, используется такой синтаксис:

Add-LocalGroupMember -Group 'RemoteSupport' -Member ('MicrosoftAccount\[email protected]','AzureAD\[email protected]') –Verbose

Чтобы вывести список локальных групп, в которых состоит конкретный пользователь, выполните следующий скрипт:

foreach ($LocalGroup in Get-LocalGroup)
{
if (Get-LocalGroupMember $LocalGroup -Member 'sivanov' –ErrorAction SilentlyContinue)
{
$LocalGroup.Name
}
}

Чтобы удалить пользователя из группы, выполните:

Remove-LocalGroupMember -Group 'RemoteSupport' –Member 'testuser2'

Для управления локальными пользователями на удаленном компьютере нужно сначала подключится к нему через WinRM командлетами Invoke-Command или Enter-PSSession.

Например, нам нужно собрать список учетных записей в локальной группе на удаленных компьютерах:

$s = new-pssession -computer pc01,pc02,pc03

invoke-command -scriptblock {Get-LocalGroupMember -Group 'RemoteSupport'} -session $s -hidecomputername | select * -exclude RunspaceID | out-gridview -title "LocalAdmins"

When you need to create a local user in Windows 10 or 11 you can use the User Accounts control panel. But we can also use PowerShell to create a new local user. This way we can easily automate creating a local account on Windows devices.

To create a local user with PowerShell you will need to have administrator access to the computer and run PowerShell as admin (elevated). Otherwise, you won’t be able to create accounts.

In this article, I will explain how you can create a new localuser. At the end of the article, I have two PowerShell scripts that you can use to create a local user.

In this article

To create a new local user we are going to use the New-LocalUser cmdlet in PowerShell. We have the option to set a password for the account or create an account without a password.

There are also a couple of other useful parameters that we can use:

Parameter Description
-Name Login name of the account – max 20 characters
-Password Password – supplied with a secure string
-Description Description of the account
-AccountExpires DateTime object when the account expires
-AccountNeverExpires Account does not expire
-Disabled Creates the account as disabled
-FullName The display name of the account
-PasswordNeverExpires Password does not expire
-UserMayNotChangePassword User can’t change the password
New-LocalUser cmdlet parameters

So to quickly create a local user account with PowerShell we can do the following:

$password = Read-Host -AsSecureString
New-LocalUser -Name "LazyUser" -Password $password -FullName "Lazy User" -Description "Test user"
new localuser

PowerShell New localuser

Note

PowerShell 7.3.x throws an error “New-LocalUser: Could not load type ‘Microsoft.PowerShell.Telemetry.Internal.TelemetryAPI’” , you can solve it by first importing the localaccounts module with: import-module microsoft.powershell.localaccounts -UseWindowsPowerShell

This small PowerShell script will require you to first enter the password, after which the user is created with the given password.

Providing the Password

As you can see this won’t allow you to run the script autonomous, because you will need to enter a password. This is also the challenge with creating local users, most of the time you want to supply the password in a secure way.

If you run the script remotely or under your own supervision then you could write the password inside a PowerShell script and convert it to a secure string. But keep in mind, anyone who opens the script is able to read the password!

# Username and Password
$username = "LazyUser"
$password = ConvertTo-SecureString "LazyAdminPwd123!" -AsPlainText -Force  # Super strong plane text password here (yes this isn't secure at all)

# Creating the user
New-LocalUser -Name "$username" -Password $password -FullName "$username" -Description "Lazy Test user"

You could save this into a ps1 file and simply run it in an elevated PowerShell session.

Setting the Expired Date

By default, the new user account won’t expire, but with the New-LocalUser cmdlet, we can set an expiration date for the account. For the date we will need to use a PowerShell DateTime object:

$date = Get-Date -Year 2022 -Month 06 -Day 10

# Creating the user
New-LocalUser -Name "$username" -Password $password -AccountExpires $date -FullName "$username" -Description "Lazy Test user"

Making user member of a group with Add-LocalGroupMember

After you have created the user you will need to make it a member of a local group. Without it, the user won’t be able to log on. To make the user member of a group we are going to use the Add-LocalGroupMember cmdlet.

The Add-LocalGroupMember only requires the group name and the member that you want to add:

Add-LocalGroupMember -Group Users -Member LazyUser

The cmdlet doesn’t give any output on success, only an error when the group name or member isn’t found.

You can also add multiple users to a local group with PowerShell. Simply comma separate the members in the cmdlet:

Add-LocalGroupMember -Group Users -Member "LazyUser", "LazyUser2"

Complete Script for new localuser in PowerShell

I have created two scripts that will help you with creating a local user account with PowerShell. In both scripts, I have added the option to write a log file. This log file is stored on a network share, allowing you to easily check if the creation is successful on the computer.

The first script has a password set in the script, so you can simply run the script on a computer. Keep in mind that you will need to have administrator access to create a local user account!

<#
.SYNOPSIS
  Create local admin acc

.DESCRIPTION
  Creates a local administrator account on de computer. Requires RunAs permissions to run

.OUTPUTS
  none

.NOTES
  Version:        1.0
  Author:         R. Mens - LazyAdmin.nl
  Creation Date:  25 march 2022
  Purpose/Change: Initial script development
#>

# Configuration
$username = "adminTest"   # Administrator is built-in name
$password = ConvertTo-SecureString "LazyAdminPwd123!" -AsPlainText -Force  # Super strong plane text password here (yes this isn't secure at all)
$logFile = "\\server\folder\log.txt"

Function Write-Log {
  param(
      [Parameter(Mandatory = $true)][string] $message,
      [Parameter(Mandatory = $false)]
      [ValidateSet("INFO","WARN","ERROR")]
      [string] $level = "INFO"
  )
  # Create timestamp
  $timestamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")

  # Append content to log file
  Add-Content -Path $logFile -Value "$timestamp [$level] - $message"
}

Function Create-LocalAdmin {
    process {
      try {
        New-LocalUser "$username" -Password $password -FullName "$username" -Description "local admin" -ErrorAction stop
        Write-Log -message "$username local user crated"

        # Add new user to administrator group
        Add-LocalGroupMember -Group "Administrators" -Member "$username" -ErrorAction stop
        Write-Log -message "$username added to the local administrator group"
      }catch{
        Write-log -message "Creating local account failed" -level "ERROR"
      }
    }    
}

Write-Log -message "#########"
Write-Log -message "$env:COMPUTERNAME - Create local admin account"

Create-LocalAdmin

Write-Log -message "#########"

The script will make the user member of the Administrators group in this case. You can of course change this to any other group. Make sure that you set the username, password, and logfile path in this first part of the script.

You can also download the complete script here from my Github repository.

Local User account script

The second script creates a local user account that is a member of the user’s groups. The difference with the first script is that this script will ask for the password.

<#
.SYNOPSIS
  Create local user acc

.DESCRIPTION
  Creates a local user account on de computer. Requires RunAs permissions to run

.OUTPUTS
  none

.NOTES
  Version:        1.0
  Author:         R. Mens - LazyAdmin.nl
  Creation Date:  25 march 2022
  Purpose/Change: Initial script development
#>

# Configuration
$username = "LazyTestUser"   # UserName
$fullName = "Lazy Test User" # Full name
$logFile = "\\server\folder\log.txt"

Function Write-Log {
  param(
      [Parameter(Mandatory = $true)][string] $message,
      [Parameter(Mandatory = $false)]
      [ValidateSet("INFO","WARN","ERROR")]
      [string] $level = "INFO"
  )
  # Create timestamp
  $timestamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")

  # Append content to log file
  Add-Content -Path $logFile -Value "$timestamp [$level] - $message"
}

Function Create-LocalUser {
    process {
      try {
        New-LocalUser "$username" -Password $password -FullName "$fullname" -Description "local user" -ErrorAction stop
        Write-Log -message "$username local user created"

        # Add new user to administrator group
        Add-LocalGroupMember -Group "Users" -Member "$username" -ErrorAction stop
        Write-Log -message "$username added to the local users group"
      }catch{
        Write-log -message "Creating local account failed" -level "ERROR"
      }
    }    
}

# Enter the password
Write-Host "Enter the password for the local user account" -ForegroundColor Cyan
$password = Read-Host -AsSecureString

Write-Log -message "#########"
Write-Log -message "$env:COMPUTERNAME - Create local user account"

Create-LocalUser

Write-Log -message "#########"

Again, you can download the complete script here from my Github repository.

Wrapping Up

The New-LocalUser should also be capable of creating a local account that is connected to a Microsoft account. But the username is still limited to 20 characters and doesn’t accept the @ symbol. So for now we are limited to local accounts only.

I hope this article helped you with creating a local user account with PowerShell. If you have any questions, just drop a comment below.

Содержание

  1. Создание пользователя из командной строки
  2. Создаем пользователей AD в powershell используя New-ADUser
  3. Создание пользователя в Powershell с параметрами New-ADUser
  4. Создание пользователя в Powershell в определенной OU используя New-ADUser Path
  5. Создание пользователей AD из CSV в Powershell New-ADUser
  6. Управление локальными пользователями и группами с помощью PowerShell
  7. Модуль LocalAccounts
  8. Управление локальными пользователями Windows с помощью PowerShell
  9. Управление локальными группам Windows с помощью PowerShell
  10. Как быстро добавить пользователей в группы AD [скрипт]
  11. Автоматизируем создание учетных записей с помощью PowerShell

Создание пользователя из командной строки

Давным-давно прошли те времена, когда при установке Windows приходилось использовать загрузочную дискету. Если бы не эксперименты с переустановкой Windows (помнится восторг от инсталляции Millenium вместо 98) и частое использование CMD и ее утилит, то желание узнать что-то больше, что-то, что лежит за гранью, кануло бы в небытие.

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

Если запустить команду net user без параметров, то можно увидеть, что кроме пользователя, создание которого производилось из командной строки, есть, и… УчетнаяЗапись Администратор и Гость. К сожалению, данная команда не показывает, какая активирована, а какая нет. Стоит помнить, что встроенные системные Учетные_Записи Администратор и Гость нельзя удалить посредством команды net user Администратор /delete. Их можно только отключить:


Стоит помнить, что данные учетные записи могут иметь и другие названия (Administrator, admin…). А теперь самое интересное, если вы счастливый обладатель XP, ну например SP3 (полагаю, что многое зависит еще и от сборки), то при установке операционной системы, Учетная_Запись «Администратор» остается включенной, более, она не отображается при входе в систему. В интернете есть видео под громким названием «Обходим пароль администратора», так вот, там при входе в систему (при появлении окна приветствия) достаточно было ввести комбинацию CTRL+Alt+DEL (дважды), в появившемся окне ввести Administrator и Enter, вы попадете в систему да еще и с правами администратора! Понятно, что если учетная запись не имеет пароля, и активна, то ничто не мешает попасть в середину. Для любознательных, можно открыть Панель управления/ Администрирование/ Управление компьютером и аналогично посмотреть, какие учетные записи есть и какие активны. Но, если вы счастливый обладатель Семерки, то тут трюк с CTRL+Alt+DEL уже не пройдет, поскольку Администратор отключен.

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

И так, следующая команда net localgroup позволяет просматривать имеющиеся в системе группы и добавить нового пользователя из CMD (командной строки) в ту или иную группу. Проделав аналогичные действия, мы увидим, что групп не две как предполагалось (Администраторы и Гости), а значительно больше.

Ладно, добавим NewUser в группу администраторы:

После выполнения данной команды наш новоиспеченный NewUser будет состоять в двух группах – Администраторы и пользователи (при желании можно его и в остальные группы добавить). Удаление пользователя из группы происходит с использованием параметра /delet. Например:

Тут стоит обратить внимание на Семерку, тут есть порой очень раздражающий механизм UAC – контроль учетных записей. При попытке что-то установить или изменить в системе, он предлагает вариант разрешить или нет. Иногда этот механизм не позволяет установить игру или программный пакет (стоит помнить, что некоторые функции CMD работают лишь в том случае, например, создание пользователя из командной строки, если ее запустить от имени администратора), в таком случае можно попробовать активировать встроенную системную запись Администратор и уже под ней произвести нужные действия. НО. После, ее надо или снова отключить, или же поставить пароль, от греха подальше.

Спасибо за внимание. Автор блога Владимир Баталий

Источник

Создание пользователей в Powershell можно выполнить через команду New-ADUser. Мы рассмотрим как создавать в определенной OU, с паролем, из CSV и с другими параметрами.

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

Навигация по посту

Создание пользователя в Powershell с параметрами New-ADUser

У командлета есть много параметров (больше 60) и мы рассмотрим основные из них. Для того что бы увидеть все параметры выполните следующее:

Или если хотите найти конкретный параметр (в моем случае все где есть Name):

Обычно нам нужно создать учетку AD с паролем, именем и фамилией и она должна быть активна. Для создания пользователя AD с паролем используется другой командлет Powershell. Я объявлю пароль в переменной, но можно сразу и при создании пользователя:

Затем создадим пользователя:

Создание пользователя в Powershell в определенной OU используя New-ADUser Path

Для добавления пользователя в другой OU нужно использовать ключ Path. На примере домена domain.local и организационной единице Moscow путь будет выглядеть так:

Причем может появится ошибка:
new-aduser объект каталога не найден
Т.к. в пути вместо OU указывают контейнер CN.

Или если в нас вложенные OU:

Я создал в Excel такой файл и сохранил как CSV:

Для того что бы импортировать файл есть командлет Import-Csv. Нужно обратить внимание какой разделитель (делимитер) в файле и у вас в системе. Увидеть это можно так:

Если есть отличия, то тогда в команде импорта нужно добавить ключ ‘-Delimiter’ и указать тот, который в файле. Отличия будут, например, если файл был создан в русской локализации, а импорт идет на сервере с английской.

Импорт и создание пользователей делается так:

Сложение в Path сделано для демонстрации такой возможности и не является обязательным.

У меня так же была ошибка:

Причины возникновения не совсем ясны. Хоть ошибка и указывала на начало командлета New-AdUser, но проблема была в Path. Из рекомендаций были убрать в CSV файле пустые строки, проверить, что у нас нет путаницы с кавычками ( что мы не используем » ‘ в одном объекте), а так же вынести значение Path вне цикла в переменную. Мне помогло, как я понял, замена кавычек в ключе, экранирование скобками и удаление пробелов в этом ключе.

Само собой мы можем в Csv файле создать больше колонок. Например мы можем там создать и пароль, что бы у всех пользователей он был разный, но нужно будет обязательно сконвертировать его через ConvertTo-SecureString.

Источник

Управление локальными пользователями и группами с помощью PowerShell

Относительно недавно Microsoft добавила в Windows стандартный PowerShell модуль для управления локальными пользователями и группами под названием Microsoft.PowerShell.LocalAccounts. Ранее этот командлет нужно было качать и импортировать в PowerShell отдельно. В Windows Server 2016 и Windows 10 модуль LocalAccounts теперь доступен по умолчанию, т.к. он входит в состав PowerShell 5.1. В более ранние версии Windows для использования модуля управления локальными аккаунтами нужно установить Windows Management Framework 5.1.

Модуль LocalAccounts

Всего в модуль входит 15 командлетов. Полный список командлетов в модуле LocalAccounts можно вывести так:

Далее рассмотрим несколько типовых задач по управлению локальными пользователями и группами на компьютере с Windows 10 при помощи PowerShell командлетов из состава модуля LocalAccounts.

Управление локальными пользователями Windows с помощью PowerShell

Выведем список имеющихся на компьютере локальных пользователей Windows:

Как вы видите, на компьютере имеется 7 локальных учетных записей, 3 из которых отключены (Enabled=False).

Чтобы вывести все свойства конкретной локальной учетной записи (аналог комадлета для получения иформации о пользователях из AD — Get-ADUser), выполните:

Чтобы получить конкретный атрибут пользователя, например, время последней смены пароля, выполните:

Создадим нового локального пользователя с помощью командлета New-LocalUser. Данный командлет позволяет создать следующие типы учетных записей:

При создании учётной записи пользователя с помощью New-LocalUser нельзя указывать ее пароль в качестве аргумента Password в открытом виде. Предварительно пароль нужно сконвертировать в безопасную строку, запросив пароль интерактивно:

$UserPassword = Read-Host –AsSecureString

Или указав пароль непосредственно в консоли PoSh:

Чтобы изменить пароль пользователя, воспользуйтесь командой Set-LocalUser (предполагаем, что вы уже преобразовали новый пароль в SecureString):

Чтобы установить флаг «Срок действия пароля пользователя не истекает» («Password never expired»), выполните:

Как видите, вам не нужно преобразовывать значение UserAccountControl, как при управлении свойствами учётной записи в AD.

Как вы помните, вы можете авторизоваться в Windows 10 под учетными записями Microsoft. Если нужно создать нового пользователя, связанного с аккаунтом Microsoft, выполните следующую команду (обратите внимание, что пароль аккаунта указывать не нужно, т.к. он хранится в Microsoft).

Для создания локальной учётной записи, которая связана с вашим аккаунтом в Azure AD (например, вы пользуетесь Office 365), выполните команду:

Чтобы удалить этого локального пользователя, выполните:

Управление локальными группам Windows с помощью PowerShell

Теперь выведем список локальных групп на компьютере:

Создадим новую группу:

Теперь добавим в новую группу несколько локальных учетных записей и группу локальных администраторов:

Если ваш компьютер входит в домен, то вы можете добавить в локальную группы и доменные аккаунты или группы. Для этого их нужно указывать в формате DomainName\user2 или DomainName\’domain admins’.

Также вы можете добавить пользователя в группы с помощью следующего конвейера (добавим пользователя в локальные администраторы):

Выведем список пользователей в локальной группе:

Как вы видите, мы используем только локальные учетные записи (PrincipalSource – Local). Однако здесь могут быть доменные аккаунты (domain), учетные записи Microsoft (MicrosoftAccount) и аккаунты из Azure (AzureAD).

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

Чтобы убрать пользователя из группы, выполните:

Для управления локальными пользователями на удаленном компьютере нужно сначала подключится к нему через WinRM командлетами Invoke-Command или Enter-PSSession.

Например, нам нужно собрать список учетных записей в локальной группе на удаленных компьютерах:

Источник

Как быстро добавить пользователей в группы AD [скрипт]

Сегодня покажу вам, как можно очень быстро добавить кучу пользователей в группы Active Directory, при помощи простенького скрипта PowerShell.

Сразу покажу скрипт, чтобы не томить.

Как, наверное, процентов 80 админов добавляют пользователей? Правильно – при помощи оснастки пользователи и компьютеры.

ОК, если так нужно добавить одного-двух в пару групп, в принципе можно и так, но вот если пользователей больше – то это уже крайне неэффективно.

Тут может помочь команда из модуля activedirectory для powershell:

Вот, так уже на много быстрее и эффективнее, но всё равно… А если будет несколько десятков пользователей и столько же групп, куда нужно всех раскидать? То же замучаешься набирать эту команду. Кроме того, когда набираешь кучу однотипных команд крайне велика вероятность, где то ошибиться. И тут нам на помощь приходит скрипт.

Все версии PowerShell умеют парсить CSV файлы, по крайней мере начиная с версии 2, чем мы и воспользуемся, создадим файл users.csv с примерно таким содержанием:

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

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

Тем самым можно сэкономить кучу времени и главное избежать ошибок при добавлении.

Немного разберем скрипт.

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

Далее отчищаем прошлые ошибки.

Импортируем модуль activedirectory, что бы PowerShell узнал о заветной команде.

Указываем путь до CSV файла и импортируем его.

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

Исключительно в целях эстетики

Смотрим на количество ошибок, и выводим это количество.

Смотрим на количество успешных выполнений и выводим это количество.

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

И на последок, хочу сказать – учите PowerShell, даже если вы работаете в очень маленькой организации и у вас нет необходимости что-то автоматизировать.

Дело в том, что Microsoft уже начала активные и очень агрессивные действия по избавлению от GUI в серверных ОС. Например, Windows Server 2016 1709, которая сейчас доступна только корпоративным клиентам по VL каналам, уже лишена возможности установки ОС с Desktop Experience, и включить эту фичу после установки нельзя (речь конечно о чистой, новой установке). Только Core, только хардкор. Так что, так или иначе, рано или поздно придется отказаться от использования GUI в серверных виндах, и лучше заранее к этому подготовиться.

Источник

Автоматизируем создание учетных записей с помощью PowerShell

В самом простом варианте создание новой учетной записи пользователя занимает примерно пару минут. Открываем оснастку «Active Directory – Users and Computers», заходим в нужное подразделение (OU), в меню выбираем Создать — Пользователь, вводим имя пользователя и пароль. Все, учетка готова, можно работать.
А теперь представьте, что таким образом вам надо создать не одну, а скажем 50 учетных записей, и делать это регулярно.

Поскольку наврядли кому-то нравится проводить время, тупо набирая учетные данные пользователей, то делаем простой вывод — процесс заведения пользователей надо автоматизировать. И поможет нам в этом PowerShell.

Итак, представим, что нам нужно срочно создать 50 однотипных учетных записей. Пишем вот такой скрипт:

Запускаем скрипт, и в подразделении Students создается 50 пользователей с именами student1-student50. По умолчанию учетки создаются отключенными, и пользователи все равно будут вынуждены к вам обращаться для их активации. Попробуем этого избежать:

Здесь создаем учетные записи уже активными и задаем p@$$w0rd как пароль по умолчанию, а также указываем сменить его при первом входе в систему. Чтобы не передавать пароль в открытом виде, используем командлет ConvertTo-SecureString, который переводит текстовую строку в защищенный формат

Теперь сделаем наш скрипт чуть более гибким. Используя командлет Read-Host заставим наш скрипт запрашивать имя и количество пользователей:

Учетные записи созданы, пользователи могут заходить в систему и работать. Теперь их надо настроить — добавить в группы безопасности, прописать домашний каталог, сценарии входа и т.п. Сделать это можно с помощью шаблона. Проще говоря, создаем шаблонную учетную запись, полностью настраиваем ее, а затем делаем с нее нужное количество копий с помощью параметра -Instance :

Еще один способ автоматизировать создание учетных записей — импортировать их из CSV-файла. Этот способ подойдет в том случае, если вам предоставили список пользователей, и им надо завести учетные записи в соответствии с этим списком. Как правило, подобные списки создаются в Excel в виде таблицы со столбцами Имя, Должность, Отдел и т.п., примерно такого вида:

Наша задача — сохранить его в формате CSV и затем указать в скрипте с помощью командлета Import-CSV. Если ваш CSV-файл содержит все необходимые столбцы, то New-ADUser автоматически свяжет их с правильными атрибутами пользователя :

Таким образом можно импортировать сотни новых пользователей за несколько секунд, но есть в этом методе и подводные камни:

В заключение несколько важных моментов:

Для запуска командлета New-ADUser необходимо предварительно импортировать модуль Active Directory для PowerShell. Делается это командой Import-Module ActiveDirectory, можно просто вставить эту строку в скрипт. Исключение составляет случай, когда вы запускаете скрипт из специальной оснастки «Модуль Active Directory для Windows PowerShell».

Модуль ActiveDirectory доступен на серверах под управлением Windows Server 2008R2/2012, а также на рабочих станциях Windows 7/8 c установленным пакетом администрирования RSAT.

Для работы модуля ActiveDirectory необходима веб-служба Active Directory (ADWS), предоставляющая веб-интерфейс для доступа к службе каталогов. По умолчанию эта служба устанавливается автоматически при добавлении ролей сервера AD DS и AD LDS на серверах под управлением Windows Server 2008R2 и выше. Для Windows Server 2003\2008 эту службу можно установить отдельно, скачав отсюда.

Источник

For the longest time, part of our user onboarding process was to manually create user accounts in the Active Directory Users and Computers (ADUC) widget. It doesn’t take very long, but whenever you onboard users manually, there’s a higher margin for error. For example, our ticketing system uses LDAP to pull the email field from AD. If we forget to add their email to AD when creating their account, the user can’t submit a ticket to us on their first day if they need help.

That’s where automation comes in. Rather than manually trying to enter the email address, add to specific groups or distribution lists, or update the AD description you can just automate the process.

Although this script isn’t the cleanest things in the world (I need to rewrite it using splotting), it works very well. Once ran, this script will prompt for things like First Name, Last Name, Username, Email and store them as variables to reference in other parts of the script. This eliminates you needing to add things like username to multiple fields.

In this post, you will learn how to create a Powershell script to create a new Active Directory user account.


Prerequisities

This script is made up of two parts:

  • Creating the user account
  • Adding the user to specific Active Directory groups by “copying” the groups of an existing user.

Whenever we create AD user accounts manually, we would always compare group membership of an employee in the new hire’s department, and then manually add the groups to the new hire. Adding this “CopyADGroup” section saves us a bunch of time and eliminates any chances of missing a required group.


Powershell Script to Create new AD User and Copy Group Membership of Existing User

# Active Directory
Import-Module ActiveDirectory

# Arrays for the script
$FirstName = Read-Host "Enter First Name"
$Surname = Read-Host "Enter Last Name"
$Username = Read-Host "Enter Username (i.e - FirstinitialLastName)"
$ADgroups = Read-Host "Copy AD group membership from which user?"
$Password = Read-Host "Enter a Password" | ConvertTo-SecureString -AsPlainText -Force

# Creating Displayname, First name, surname, samaccountname, UPN, etc and entering and a password for the user.
 New-ADUser `
-Name "$FirstName $Surname" `
-GivenName $FirstName `
-Surname $Surname `
-SamAccountName $Username `
-UserPrincipalName $Username@domain.com `
-Displayname "$FirstName $Surname" `
-Path "CN=Users,DC=domain,DC=com" `
-AccountPassword $Password 

# Set required details
Set-ADUser $Username -Enabled $True
Set-ADUser $Username -ChangePasswordAtLogon $False 
Set-ADUser $Username -EmailAddress "$Username@domain.com"

# Finds all the AD-groups that the "$ADGroups" user you entered is a part of and adds it to the new user automatically.
Get-ADPrincipalGroupMembership -Identity $ADgroups | select SamAccountName | ForEach-Object {Add-ADGroupMember -Identity $_.SamAccountName -Members  $Username }

Write-Host -BackgroundColor DarkGreen "Active Directory user account setup complete!"

This could just be an error in my environment, but whenever I run the script, I see an error that “User has already been added to the group”, even though he wasn’t a part of the group initially. It does successfully copy Group Membership from the user I enter, but it’s still annoying to see red error text when the scripts run successfully.

As a workaround, add this to the very top of your script. Keep in mind that adding this will prevent the script from showing ANY error messages, so you may not want to add this until after you verify the script runs successfully for you.

#Remove error message that says can't add to group, even though it does add it successfully.
$ErrorActionPreference = 'SilentlyContinue'
Write-Host -BackgroundColor DarkGreen "Creating Active Directory user account..."

How to Find OU of User Account

If you’re looking at the script above and thinking, “I don’t know how to find what OU my users are a part of!”, then you are in luck.

Just open Command Prompt and type this:

whoami /fqdn

It will then show you exactly what you need to use in the script.

If your users go into different OU’s, then I would recommend moving them to the correct OU after the account is created.


How to Copy Additional AD Attributes

My script above only includes things that I personally would need to copy from one user to another. However, I know a lot of companies utilize many different fields such as Office, Telephone Number, Location, etc.

So, I threw together this short script you can add to my script above if you’d like. This copies individual attributes from the source user $ADgroups and copies them to the destination new hire user $Username.

This could probably be cleaned up with splotting, but it gets the job done.

$Office = (Get-aduser $ADgroups -properties Office | Select -exp Office)
$Des = (Get-aduser $ADgroups -properties Description | Select -exp Description)
$Tele = (Get-aduser $ADgroups -properties OfficePhone | Select -exp OfficePhone)
Set-Aduser $Username -Office "$Office"
Set-Aduser $Username -Description "$Des"
Set-Aduser $Username -OfficePhone "$Tele"

Wrapping Up

Hopefully this tutorial guide helps you automate the process of creating new hires!

This post is a part of my Automating New Hires With Powershell series, where I create a bunch of helpful Powershell scripts and eventually add them to a GUI menu like what you see below.

  • How To Create AD Users and Copy Group Permissions with Powershell
  • How to Generate PasswordPush Links for Sharing Email Passwords Securely via Email
  • Use Powershell to Open Multiple URL’s in Chrome
  • Move Computer Object to Different OU in Powershell
  • How to Attach Welcome Email PDF via Powershell

My Homelab Equipment

Here is some of the gear I use in my Homelab. I highly recommend each of them.

  • Server 2019 w/ Hyper-V
  • Case: Fractal Design Node 804
  • Graphics Card: NVIDEA Quadro K600
  • CPU: AMD Ryzen 7 2700

The full list of server components I use can be found on my Equipment List page.

Недавно прочёл хорошую статью, в которой пошагово рассматривался процесс создания локальной (не доменной) учётной записи администратора на компьютере. Пока читал вспомнил, что давно хотел написать скрипт, который будет создавать скрытую учётку админа для удалённого администрирования, всё не хватало волшебного пендаля стимула. Так что сегодня будем учиться создавать локальных пользователей на компьютере. А чтобы было ещё веселее, будем создавать локального пользователя на удалённом компьютере.

Я уже кода-то рассматривал вопрос работы с локальными учётными записями через Powershell. С тех пор выходили новые версии Powershell, .NET Framework, Windows, а удобных инструментов для работы с пользователями похоже так и не появилось (не считая DSC). Поэтому придётся работать через неудобный ADSI.

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

Итак, скрипт имеет несколько параметров:

  • Имя компьютера, с которым будем работать

  • Имя создаваемого пользователя

  • Группа, в которую этот пользователь будет входить

  • Описание пользователя

  • Пароль пользователя

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

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

param
(
    # Имя компьютера
    [string]$ComputerName = $Env:COMPUTERNAME,
    
    # Имя пользователя
    [string]$UserName = 'ServiceAccount',
    
    # Группа
    [string]$GroupName = 'Администраторы',
    
    # Описание
    [string]$Description = 'Автоматически созданная учётная запись',

    # Пароль
    [Parameter(Mandatory=$true)]
    [string]$Password,
    
    # Нужно-ли скрывать пользователя
    [switch]$HideUser
)

Я пропущу несколько моментов не имеющих отношения к делу, вроде проверки доступности компьютера и т.д.

При желании/необходимости можно убедиться, что создаваемого пользователя ещё нет. Для этого можно использовать метод Exists():

# Проверка существует-ли пользователь
if ([ADSI]::Exists("WinNT://$ComputerName/$UserName"))
{
    Write-Warning "$UserName на $ComputerName уже существует"
    break
}

А также убедиться в том, что имя группы задано корректно, и такая группа есть на компьютере (аналогичным образом):

# Проверка существует-ли группа
if (-not [ADSI]::Exists("WinNT://$ComputerName/$GroupName"))
{
    Write-Warning "Группа $GroupName на $ComputerName не найдена"
    break
}

Получаем объект компьютера:

$Computer = [ADSI]"WinNT://$ComputerName,computer"

Заполняем атрибуты пользователя:

# Создаём пользователя
$User = $Computer.Create('User', $UserName)

# Устанавливаем пароль пользователя
$User.SetPassword($Password)

# Добавляем описание пользователя
$User.Put('Description',$Description)

Сейчас, у нас всё готово для того, чтобы создать пользователя, но сам пользователь фактически ещё не создан, результат всех наших манипуляция хранится в оперативной памяти. Для того, чтобы создать-таки наконец пользователя и перенести изменения из оперативной памяти в постоянную нужно вызвать метод SetInfo():

# Записываем информацию
$User.SetInfo()

Устанавливаем срок действия пароля – не ограничен. Поначалу думал, что установка свойства PasswordExpired в 0 даст нужный эффект, тем более, что у существующих пользователей с неограниченным сроком действия пароля это свойство установлено в 0, однако на практике оказалось, что это ни фига не работает. Поигравшись определил, что если PasswordExpired установить в 1, то это равносильно установке галочки «Потребовать смену пароля при следующем входе в систему».

Поэтому для неограниченного срока действия пароля поступил как в исходной статье:

# Задаём срок действия пароля - не ограничен
$User.UserFlags.Value = $User.UserFlags.Value -bor 0x10000
$User.CommitChanges()

Добавляем пользователя в группу:

# Добавляем пользователя в группу
$Group = [ADSI]"WinNT://$ComputerName/$GroupName, group"
$Group.Add("WinNT://$UserName, user")

Также не помешает добавить обработку ошибок на случай если пользователь от имени которого мы пытаемся создать пользователя не имеет таких прав, или, например, пароль не соответствует настройкам политик безопасности. Для этих целей хорошо подойдёт конструкция try… catch.

Осталось спрятать пользователя (при выборе соответствующего параметра), но об этом поговорим в другой раз.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Система архивации данных windows server 2012 удаление старых копий
  • Как сделать мелкие значки на рабочем столе windows 11
  • Вы зарегистрировались в программе предварительной оценки windows 10 как удалить
  • Размытые иконки в windows 10
  • Как сделать загрузочную флешку windows 2000