Главная > Powershell > Работа с локальными учётными записями в Powershell

Работа с локальными учётными записями в Powershell

Я когда-то уже рассказывал как неудобно работать с локальными учётными записями пользователей в Powershell. Раньше для этого приходилось использовать не совсем удобный ADSI. С выходом Powershell 5.1, наконец-то, появились стандартные командлеты для управления учётными записями.

Начиная с версии 5.1 в Powershell появился модуль LocalAccounts, который содержит командлеты для работы с учётными записями.

Посмотреть какие командлеты есть в этом модуле можно выполнив команду

Get-Command -Module *LocalAccounts

(Вообще полное название модуля – Microsoft.PowerShell.LocalAccounts, но если в консоли после *local нажать TAB Powershell сам подставит название модуля.)

Или, чтобы убрать ненужную информацию и вывести только имена командлетов:

C:\ Get-Command -Module *LocalAccounts | Select-Object -ExpandProperty Name

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

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

# Задаём учётные данные пользователя
$UserName = 'ServiceAccount'
$Password = Read-Host -AsSecureString

# Создаём пользователя
New-LocalUser $UserName -Password $Password -PasswordNeverExpires
# Добавляем пользователя в группу
Add-LocalGroupMember -Group Администраторы -Member $UserName

Пара пояснений.

Во-первых, если вдруг нужно создать пользователя без пароля, командлету New-LocalUser обязательно нужно задать параметр –NoPassword, иначе Powershell спросит пароль, который нужно будет ввести в момент вызова командлета. В качестве альтернативы можно ввести пароль заранее, при помощи командлета Read-Host, но так как пароль в виде открытого текста Powershell не примет, нужно использовать параметр –SecureString.

Во-вторых, командлет Add-LocalGroupMember применяется для добавления пользователя в группы, так как сразу после создания наш пользователь не входит ни в одну группу. В этом можно убедиться… мне не удалось найти более простого способа найти в какие группы входит пользователь, кроме как перебрать все имеющиеся группы, и вывести только те из них, в которых был найден нужный пользователь:

foreach ($Group in Get-LocalGroup)
{
 
    if (Get-LocalGroupMember $Group -Member $UserName  -EA SilentlyContinue)
    {
        $Group.Name
    }
}

Как не трудно догадаться командлет Get-LocalGroup выводит список групп пользователей.

Примечание: параметр –EA (на самом деле алиас параметра –ErrorAction, просто чтобы поместиться в одну строку), добавлен из-за того, что при каждом НЕ нахождении пользователя в группе, вываливается сообщение об ошибке.

Результат работы этого цикла эквивалентен вкладке “Членство в группах” в свойствах пользователя (в консоли “Управление компьютером”).

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

Рубрики:Powershell Метки:
  1. Комментариев нет.
  1. No trackbacks yet.

Оставьте комментарий