마이크로소프트는 Windows의 로컬 사용자와 그룹을 관리할 수 있는 표준 PowerShell 모듈인 Microsoft.PowerShell.LocalAccounts를 제공합니다. 예전에는 이 모듈을 수동으로 다운로드한 후 PowerShell로 가져와야 했지만, 이제는 PowerShell 5.1의 일부로서 Windows Server 2016과 Windows 10에 기본 포함되어 있습니다. 그 이전 버전의 Windows에서 이 모듈을 사용하려면 Windows Management Framework 5.1을 먼저 설치해야 합니다.
LocalAccounts PowerShell 모듈 개요
LocalAccounts 모듈에는 총 15개의 cmdlet이 포함되어 있습니다. 모듈에 포함된 cmdlet의 전체 목록은 다음 명령어로 확인할 수 있습니다.
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이 설치된 컴퓨터에서 LocalAccounts 모듈의 PowerShell cmdlet을 활용해 로컬 사용자와 그룹을 관리하는 대표적인 작업들을 살펴보겠습니다.
PowerShell로 Windows 로컬 사용자 관리하기
Windows에 존재하는 로컬 사용자 목록을 표시하려면 다음 명령어를 실행합니다.
Get-LocalUser

실행 결과를 보면 컴퓨터에 6개의 로컬 사용자 계정이 있으며, 그중 4개는 비활성화(Enabled=False) 상태임을 알 수 있습니다.
AD 도메인 사용자 정보를 조회하는 Get-ADUser cmdlet과 유사하게, 로컬 계정의 모든 속성을 표시하려면 다음 명령어를 실행합니다.
Get-LocalUser -Name root | Select-Object *
AccountExpires :
Description :
Enabled : True
FullName :
PasswordChangeableDate : 3/12/2019 10:14:29 PM
PasswordExpires :
UserMayChangePassword : True
PasswordRequired : False
PasswordLastSet : 3/11/2019 10:14:29 PM
LastLogon : 3/11/2019 4:18:17 PM
Name : root
SID : S-1-5-21-2605456602-2293283241-3832290805-1001
PrincipalSource : Local
ObjectClass : User
마지막 비밀번호 변경 날짜처럼 특정 사용자 속성만 확인하려면 다음 명령어를 사용합니다.
Get-LocalUser -Name root | Select-Object PasswordLastSet

New-LocalUser로 새 로컬 사용자 생성하기
New-LocalUser cmdlet을 사용하면 새 로컬 사용자를 만들 수 있습니다. 이 cmdlet으로 생성할 수 있는 계정 유형은 다음과 같습니다.
- Windows 로컬 계정
- Microsoft 계정
- Azure AD 계정
New-LocalUser cmdlet으로 사용자 계정을 생성할 때는 Password 인자에 일반 텍스트(평문) 비밀번호를 직접 지정할 수 없습니다. 비밀번호를 대화형으로 입력받아 미리 SecureString으로 변환해야 합니다.
$UserPassword = Read-Host –AsSecureString
또는 PowerShell 콘솔에서 직접 비밀번호를 지정할 수도 있습니다.
$UserPassword = ConvertTo-SecureString "H1PH0Ppa$$" -AsPlainText -Force
New-LocalUser John -Password $UserPassword -FullName "Johh Lennon" -Description "Local Account for Remote Access"
참고로 AD 도메인에 사용자를 생성하려면 New-ADUser cmdlet을 사용해야 합니다.
비밀번호 변경 및 계정 옵션 설정
사용자의 비밀번호를 변경하려면 Set-LocalUser cmdlet을 사용합니다(새 비밀번호가 이미 SecureString으로 변환되어 있다고 가정).
Set-LocalUser -Name john -Password $UserPassword –Verbose

"암호 만료 없음(Password never expires)" 플래그를 설정하려면 다음 명령어를 실행합니다.
Set-LocalUser -Name john –PasswordNeverExpires $False
AD 사용자 개체 속성을 관리할 때처럼 UserAccountControl 값을 변환할 필요가 없다는 점이 매우 편리합니다.
Microsoft 계정 및 Azure AD 계정으로 로컬 계정 생성
Windows 10에서는 Microsoft 계정으로 로그인할 수 있습니다. Microsoft 계정으로 로그인하는 새 사용자를 생성해야 한다면 다음 명령어를 실행합니다. 계정 비밀번호는 Microsoft에 저장되어 있으므로 따로 지정할 필요가 없습니다.
New-LocalUser -Name "MicrosoftAccount\woshub@outlook.com" -Description "This is a Microsoft account"
Azure AD 계정(예: Office 365 사용)과 연동된 로컬 계정을 생성하려면 다음 명령어를 실행합니다.
New-LocalUser -Name "AzureAD\admin@woshub.com" -Description "This is an Azure AD account"
로컬 사용자를 삭제하려면 다음 명령어를 사용합니다.
Remove-LocalUser -Name john -Verbose
PowerShell로 Windows 로컬 그룹 관리하기
컴퓨터에 있는 로컬 그룹 목록을 표시합니다.
Get-LocalGroup

새 그룹을 생성합니다.
New-LocalGroup -Name RemoteSupport -Description 'Remote Support Group'
로컬 계정과 로컬 관리자 그룹을 새 그룹에 추가합니다.
Add-LocalGroupMember -Group 'RemoteSupport' -Member ('john','root','Administrators') -Verbose
팁. PowerShell로 AD 도메인 그룹을 생성·삭제하거나 사용자를 추가하는 방법은 "PowerShell로 Active Directory 그룹 관리" 관련 문서를 참고하시기 바랍니다.
컴퓨터가 AD 도메인에 가입되어 있다면 도메인 계정과 그룹도 로컬 그룹에 추가할 수 있습니다. 이 경우 DomainName\jonhl 또는 DomainName\'domain admins' 형식으로 지정하면 됩니다.

파이프라인을 사용해 사용자를 그룹에 추가할 수도 있습니다(아래 예는 로컬 관리자 그룹에 사용자를 추가하는 경우).
Get-Localuser -Name john | 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 john –ErrorAction SilentlyContinue)
{
$LocalGroup.Name
}
}
그룹에서 사용자를 제거하려면 다음 명령어를 실행합니다.
Remove-LocalGroupMember -Group 'RemoteSupport' –Member john
원격 컴퓨터의 로컬 사용자 관리
원격 컴퓨터의 로컬 사용자를 관리하려면 WinRM으로 해당 컴퓨터에 연결한 뒤 Invoke-Command 또는 Enter-PSSession cmdlet을 사용하면 됩니다.
예를 들어 여러 원격 컴퓨터의 로컬 그룹에 포함된 계정 목록을 한 번에 확인해야 한다면 다음과 같이 실행합니다.
$winrm_ssn = new-pssession -computer Lon-Srv01,Lon-Srv02,Lon-Srv03
invoke-command -scriptblock {Get-LocalGroupMember -Group 'RemoteSupport'} -session $winrm_ssn -hidecomputername | select * -exclude RunspaceID | out-gridview -title "LocalAdmins"