Управління локальними користувачами і групами за допомогою PowerShell

Відносно недавно 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"

Для створення користувача в домені AD потрібно використовувати командлет New-ADUser.

Щоб змінити пароль користувача, скористайтеся командою 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

Порада. Як створити, видалити або додати користувачів в доменні групи, можна дізнатися в статті Робота з групами Active Directory за допомогою PowerShell.

Якщо ваш комп'ютер входить до домену, то ви можете додати в локальну групи і доменні акаунти або групи. Для цього їх потрібно вказувати в форматі 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"