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

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

Длина и сложность пароля пользователя должен соответствовать локальной и доменной политике паролей (если компьютер добавлен в домен AD ).

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

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

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

Add-LocalGroupMember -Group Administrators -Member TestUser2

Список локальных пользователей в Windows можно показать на экране входа в систему .

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

  • -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 :_x000D_Description :_x000D_Enabled : True_x000D_ FullName :_x000D_PasswordChangeableDate : 7/20/2022 12:17:04 PM_x000D_PasswordExpires :_x000D_UserMayChangePassword : True_x000D_PasswordRequired : False_x000D_PasswordLastSet : 7/20/2022 12:17:04 PM_x000D_LastLogon  : 5/15/2023 2:01:48 AM_x000D_Name  : root_x000D_SID: S-1-5-21-1823742600-3125382138-2640950260-1001_x000D_PrincipalSource : Local_x000D_ObjectClass : User_x000D_

Обратите внимание на атрибут 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

Для управления и автоматической смены паролей локальных администраторов на всех компьютерах домена можно использовать политики Windows LAPS (Local Administrator Password Solution) .

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

Set-LocalUser -Name TestUser2 –PasswordNeverExpires $True

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

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

Disable-LocalUser -Name TestUser2

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

Enable-LocalUser -Name TestUser2

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

Remove-LocalUser -Name TestUser2 -Verbose

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

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

Get-LocalGroup

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

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

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

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

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

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

Также вы можете добавить пользователя в группы с помощью следующего конвейера (в этом примере мы добавим пользователя в локальную группу, разрешающую ему удаленный доступ к рабочему столу через 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"

EnglishRussianUkrainian