Поиск по сайту:

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


Когда вам нужно создать локального пользователя в Windows 10 или 11, вы можете использовать панель управления учетными записями пользователей. Но мы также можем использовать PowerShell для создания нового локального пользователя. Таким образом, мы можем легко автоматизировать создание локальной учетной записи на устройствах Windows.

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

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

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

Чтобы создать нового локального пользователя, мы будем использовать командлет New-LocalUser в PowerShell. У нас есть возможность установить пароль для аккаунта или создать аккаунт без пароля.

Существует также несколько других полезных параметров, которые мы можем использовать:

-Name

Имя пользователя учетной записи — максимум 20 символов

-Password

Пароль — предоставлен в виде защищенной строки

-Description

Описание аккаунта

-AccountExpires

Объект DateTime, когда истекает срок действия аккаунта

-AccountNeverExpires

Учетная запись не истекает

-Disabled

Создаёт учетную запись как отключенную

-FullName

Отображаемое имя учетной записи

-PasswordNeverExpires

Пароль не истекает

-UserMayNotChangePassword

Пользователь не может изменить пароль

Параметры команды New-LocalUser

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

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

PowerShell Новый локальный пользователь

Заметка

PowerShell 7.3.x выдает ошибку «New-LocalUser: Не удалось загрузить тип 'Microsoft.PowerShell.Telemetry.Internal.TelemetryAPI'», вы можете решить это, сначала импортировав модуль localaccounts с помощью: import-module microsoft.powershell.localaccounts -UseWindowsPowerShell

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

Предоставление пароля

Как вы видите, это не позволит вам запустить скрипт автономно, потому что вам нужно будет ввести пароль. Это также проблема при создании локальных пользователей, чаще всего вы хотите передать пароль безопасным способом.

Если вы запускаете скрипт удаленно или под собственным контролем, вы можете записать пароль внутри скрипта PowerShell и преобразовать его в защищенную строку. Но имейте в виду, кто бы ни открыл скрипт, тот сможет прочитать пароль!

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"

Вы можете сохранить это в файл ps1 и просто запустить его в повышенной сессии PowerShell.

Установка даты истечения

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

$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"

Добавление пользователя в группу с помощью команды Add-LocalGroupMember

После того как вы создали пользователя, вам нужно сделать его членом локальной группы. Без этого пользователь не сможет войти в систему. Чтобы сделать пользователя членом группы, мы будем использовать командлет Add-LocalGroupMember.

Команда Add-LocalGroupMember требует только имя группы и участника, которого вы хотите добавить:

Add-LocalGroupMember -Group Users -Member LazyUser

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

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

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

Полный скрипт для нового локального пользователя в PowerShell

Я создал два скрипта, которые помогут вам создать локальную учетную запись пользователя с помощью PowerShell. В оба скрипта я добавил опцию записи лог-файла. Этот лог-файл хранится на сетевом ресурсе, что позволяет вам легко проверить, успешна ли была регистрация на компьютере.

В первом сценарии установлен пароль, поэтому вы можете просто запустить сценарий на компьютере. Учтите, что вам потребуется доступ администратора для создания локальной учетной записи!

<#
.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 "#########"

В этом случае скрипт сделает пользователя членом группы Администраторов. Вы можете, конечно, изменить это на любую другую группу. Убедитесь, что вы задали имя пользователя, пароль и путь к файлу журнала в первой части скрипта.

Вы также можете загрузить полный скрипт отсюда из моего репозитория на Github.

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

Второй скрипт создает локальную учетную запись пользователя, которая является членом групп пользователя. Отличие от первого скрипта заключается в том, что этот скрипт запросит пароль.

<#
.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 "#########"

Снова вы можете скачать полный скрипт здесь из моего репозитория на Github.

Заключение

New-LocalUser также должен иметь возможность создавать локальную учетную запись, которая связана с учетной записью Microsoft. Но имя пользователя по-прежнему ограничено 20 символами и не принимает символ @. Поэтому пока мы ограничены только локальными учетными записями.

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