Относительно недавно 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 можно вывести так:
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 10 при помощи PowerShell командлетов из состава модуля LocalAccounts.
Управление локальными пользователями Windows с помощью PowerShell
Выведем список имеющихся на компьютере локальных пользователей Windows:
Get-LocalUser
Как вы видите, на компьютере имеется 7 локальных учетных записей, 3 из которых отключены (Enabled=False).
Чтобы вывести все свойства конкретной локальной учетной записи (аналог комадлета для получения иформации о пользователях из AD — Get-ADUser), выполните:
Get-LocalUser -Name ‘root’ | Select-Object *
AccountExpires :
Description :
Enabled : True
FullName :
PasswordChangeableDate : 4/23/2018 11:23:48 PM
PasswordExpires :
UserMayChangePassword : True
PasswordRequired : False
PasswordLastSet : 4/22/2018 11:23:48 PM
LastLogon : 7/15/2018 9:04:32 PM
Name : root
SID : S-1-5-21-3650440056-3766451173-3310994491-1001
PrincipalSource : Local
ObjectClass : User
Чтобы получить конкретный атрибут пользователя, например, время последней смены пароля, выполните:
Get-LocalUser -Name ‘root’ | Select-Object PasswordLastSet
Создадим нового локального пользователя с помощью командлета New-LocalUser. Данный командлет позволяет создать следующие типы учетных записей:
- Локальные учетных записи Windows
- Учетные записи Microsoft
- Учетные записи Azure AD
При создании учётной записи пользователя с помощью New-LocalUser нельзя указывать ее пароль в качестве аргумента Password в открытом виде. Предварительно пароль нужно сконвертировать в безопасную строку, запросив пароль интерактивно:
$UserPassword = Read-Host –AsSecureString
Или указав пароль непосредственно в консоли PoSh:
$UserPassword = ConvertTo-SecureString "Pa$$word!!" -AsPlainText -Force
New-LocalUser "SIvanov" -Password $UserPassword -FullName "Sergey Ivanov" -Description "Local Account dlya udalennogo vhoda"
Чтобы изменить пароль пользователя, воспользуйтесь командой Set-LocalUser (предполагаем, что вы уже преобразовали новый пароль в SecureString):
Set-LocalUser -Name sivanov -Password $UserPassword –Verbose
Чтобы установить флаг «Срок действия пароля пользователя не истекает» («Password never expired»), выполните:
Set-LocalUser -Name sivanov –PasswordNeverExpires $True
Как видите, вам не нужно преобразовывать значение UserAccountControl, как при управлении свойствами учётной записи в AD.
Как вы помните, вы можете авторизоваться в Windows 10 под учетными записями Microsoft. Если нужно создать нового пользователя, связанного с аккаунтом Microsoft, выполните следующую команду (обратите внимание, что пароль аккаунта указывать не нужно, т.к. он хранится в Microsoft).
New-LocalUser -Name "MicrosoftAccount\SomeAccount@outlook.com" -Description "Это учетка в Microsoft"
Для создания локальной учётной записи, которая связана с вашим аккаунтом в Azure AD (например, вы пользуетесь Office 365), выполните команду:
New-LocalUser -Name "AzureAD\Itpro@winitpro.ru" -Description "Это учетка в Azure AD"
Чтобы удалить этого локального пользователя, выполните:
Remove-LocalUser -Name sivanov -Verbose
Управление локальными группам Windows с помощью PowerShell
Теперь выведем список локальных групп на компьютере:
Get-LocalGroup
Создадим новую группу:
New-LocalGroup -Name 'RemoteSupport' -Description 'Remote Support Group'
Теперь добавим в новую группу несколько локальных учетных записей и группу локальных администраторов:
Add-LocalGroupMember -Group 'RemoteSupport' -Member ('SIvanov','root', 'Администраторы') –Verbose
Если ваш компьютер входит в домен, то вы можете добавить в локальную группы и доменные аккаунты или группы. Для этого их нужно указывать в формате DomainName\user2 или DomainName\’domain admins’.
Также вы можете добавить пользователя в группы с помощью следующего конвейера (добавим пользователя в локальные администраторы):
Get-Localuser -Name 'sivanov' | Add-LocalGroupMember -Group 'Administrators'
Выведем список пользователей в локальной группе:
Get-LocalGroupMember -Group 'RemoteSupport'
Как вы видите, мы используем только локальные учетные записи (PrincipalSource – Local). Однако здесь могут быть доменные аккаунты (domain), учетные записи Microsoft (MicrosoftAccount) и аккаунты из Azure (AzureAD).
Чтобы вывести список групп, в которых состоит конкретный пользователь, придется перебрать все локальные группы на компьютере:
foreach ($LocalGroup in Get-LocalGroup)
{
if (Get-LocalGroupMember $LocalGroup -Member 'sivanov' –ErrorAction SilentlyContinue)
{
$LocalGroup.Name
}
}
Чтобы убрать пользователя из группы, выполните:
Remove-LocalGroupMember -Group 'RemoteSupport' –Member 'sivanov'
Для управления локальными пользователями на удаленном компьютере нужно сначала подключится к нему через 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"
Вообще даже по логике в команде:
Set-LocalUser -Name sivanov –PasswordNeverExpires $False
должно быть $True
ну и по факту — тоже
Тоже возникло такое подозрение, проверил, убедился, что это ошибка в статье и только потом увидел ваш комент ))
Поправил, благодарю!