Для управления локальными пользователями и группами в 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
- 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.
lusrmgr.msc
) и команды
net user
,
net localgroup
.Создать нового локального пользователя с помощью PowerShell
Чтобы быстро создать нового пользователя, выполните команду:
New-LocalUser -Name "TestUser1" -FullName "Test User" -Description "User for tests"
Укажите пароль для нового пользователя:
Если вы хотите использовать командлет 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
– запретить пользователю менять свой пароль
Управление локальными пользователями Windows из PowerShell
Чтобы вывести список всех локальных пользователей Windows на текущем компьютере, выполните:
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
Чтобы изменить пароль существующего пользователя, выполните команду:
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).
Чтобы добавить в локальную группу пользователя из 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"