Работа с локальными учётными записями в 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, просто чтобы поместиться в одну строку), добавлен из-за того, что при каждом НЕ нахождении пользователя в группе, вываливается сообщение об ошибке.
Результат работы этого цикла эквивалентен вкладке “Членство в группах” в свойствах пользователя (в консоли “Управление компьютером”).
Ну и напоследок ложка дёгтя: все эти командлеты работают только с локальным компьютером, поэтому работать с учётными записями на удалённых компьютерах не получится. Остаётся надеяться, что в будущем это исправят.
Недавние комментарии