Відносно недавно Microsoft додала в Windows стандартний PowerShell модуль для управління локальними користувачами і групами під назвою Microsoft.PowerShell.LocalAccounts. Раніше цей командлет потрібно було качати і імпортувати в PowerShell окремо. У Windows Server 2016 і Windows 10 модуль LocalAccounts тепер доступний за умовчанням, тому що він входить до складу PowerShell 5.1. У більш ранні версії Windows для використання модуля управління локальними акаунтами потрібно встановити Windows Management Framework 5.1.
зміст:
- модуль LocalAccounts
- Управління локальними користувачами Windows за допомогою PowerShell
- Управління локальними групами Windows за допомогою PowerShell
модуль 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 $ False
Як бачите, вам не потрібно перетворювати значення UserAccountControl, як при управлінні властивостями облікового запису в AD.
Як ви пам'ятаєте, ви можете авторизуватися в Windows 10 під обліковими записами Microsoft. Якщо потрібно створити нового користувача, пов'язаного з членством Microsoft, виконайте наступну команду (зверніть увагу, що пароль облікового запису вказувати не потрібно, тому що він зберігається в Microsoft).
New-LocalUser -Name "MicrosoftAccount \ [email protected]" -Description "Це учетка в Microsoft"
Для створення локальної облікового запису, яка пов'язана з вашим аккаунтом в Azure AD (наприклад, ви користуєтеся Office 365), виконайте команду:
New-LocalUser -Name "AzureAD \ [email protected]" -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"