Get-ADUser PowerShell cmdlet ช่วยให้คุณได้รับข้อมูลเกี่ยวกับผู้ใช้ Active Directory คุณลักษณะ และการค้นหาระหว่างผู้ใช้โดเมน เป็นหนึ่งใน cmdlet ของ PowerShell ที่ได้รับความนิยมมากขึ้นในการรับข้อมูลจาก AD เมื่อใช้ Get-ADUser cmdlet คุณจะได้รับค่าของแอตทริบิวต์ของบัญชีผู้ใช้ AD แสดงรายการผู้ใช้โดเมนที่มีแอตทริบิวต์ ส่งออกรายงานผู้ใช้ไปยังไฟล์ CSV และใช้เกณฑ์ต่างๆ เพื่อเลือกและกรองผู้ใช้โดเมน
Get-ADUser Cmdlet ในโมดูล Active Directory PowerShell
Get-ADUser
cmdlet รวมอยู่ในโมดูลพิเศษสำหรับการโต้ตอบกับ Active Directory – Active Directory Module สำหรับ Windows PowerShell . Cmdlet ของโมดูล RSAT-AD-PowerShell ช่วยให้คุณสามารถดำเนินการต่างๆ บนวัตถุ AD
ในตัวอย่างนี้ เราจะแสดงวิธีใช้ Get-ADUser PowerShell cmdlet เพื่อรับข้อมูลเกี่ยวกับครั้งสุดท้ายที่รหัสผ่านของผู้ใช้ถูกเปลี่ยน เมื่อรหัสผ่านหมดอายุ และคุณสมบัติของผู้ใช้รายอื่น
ในการใช้โมดูล RSAT-AD-PowerShell คุณต้องเรียกใช้คอนโซล PowerShell ที่ยกระดับและนำเข้าโมดูลด้วยคำสั่ง:
Import-Module ActiveDirectory
โมดูล RSAT-AD-PowerShell ได้รับการติดตั้งตามค่าเริ่มต้นใน Windows Server 2012 (และใหม่กว่า) เมื่อคุณปรับใช้บทบาท Active Directory Domain Services (AD DS) ในการติดตั้งโมดูลบนโฮสต์ Windows Server ที่เป็นสมาชิกโดเมน ให้เรียกใช้คำสั่ง:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature
ในการใช้ Get-ADUser cmdlet บนเดสก์ท็อป Windows 10/11 คุณต้องติดตั้ง RSAT เวอร์ชันที่เหมาะสม คุณสามารถเปิดใช้งาน RSAT ผ่านการตั้งค่า -> แอป -> คุณสมบัติเสริม -> เพิ่มคุณสมบัติ -> RSAT:Active Directory Domain Services และ Lightweight Directory Services Tools .
คุณสามารถติดตั้งโมดูล RSAT AD บน Windows 10 และ 11 ด้วย PowerShell:
Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"
หากไม่ได้ติดตั้งโมดูล RSAT-AD-PowerShell บนคอมพิวเตอร์ เมื่อคุณเรียกใช้คำสั่ง Get-ADUser ข้อผิดพลาดจะปรากฏขึ้น:
Get-ADUser: The term 'get-aduser' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
ตรวจสอบว่าโมดูลได้รับการติดตั้งแล้ว และหากจำเป็น ให้นำเข้าไปยังเซสชัน PowerShell ของคุณ:
Import-Module ActiveDirectory
นอกจากนี้ยังมีวิธีการใช้โมดูล AD-PowerShell โดยไม่ต้องติดตั้ง RSAT บนคอมพิวเตอร์ของคุณ การคัดลอกไฟล์โมดูลหลักและนำเข้าโมดูลไปยังเซสชัน PowerShell ก็เพียงพอแล้ว:
Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.dll"
Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.resources.dll"
รายการอาร์กิวเมนต์ทั้งหมดของ Get-ADUser cmdlet สามารถรับได้ดังนี้:
help Get-ADUser
จะค้นหาผู้ใช้ AD และคุณสมบัติของรายการด้วย Get-ADUser ได้อย่างไร
ในการใช้ Get-ADUser cmdlet คุณไม่จำเป็นต้องเรียกใช้งานภายใต้บัญชีที่มีผู้ดูแลระบบโดเมนหรือสิทธิ์ที่ได้รับมอบหมาย ผู้ใช้โดเมน AD ที่ได้รับอนุญาตสามารถเรียกใช้คำสั่ง PowerShell เพื่อรับค่าของแอตทริบิวต์วัตถุ AD ส่วนใหญ่ (ยกเว้นค่าที่เป็นความลับ ดูตัวอย่างในบทความ Local Administrator Password Solution – LAPS) หากคุณต้องการเรียกใช้คำสั่ง Get-ADUser ภายใต้บัญชีอื่น ให้ใช้ –ข้อมูลประจำตัว พารามิเตอร์.หากต้องการแสดงรายการบัญชีผู้ใช้โดเมนทั้งหมด ให้เรียกใช้คำสั่งนี้:
Get-ADUser -filter *
ใช้ Set-ADUser cmdlet เพื่อเปลี่ยนแอตทริบิวต์ผู้ใช้ Active Directory
หากต้องการแสดงคุณสมบัติของผู้ใช้เฉพาะ ให้ใช้ –Identity
พารามิเตอร์. ข้อมูลประจำตัวอาจเป็นชื่อผู้ใช้ ล็อกอิน (SAMAccountName), DN (Distinguished Name), SID หรือ GUID
คำสั่ง PowerShell ต่อไปนี้จะส่งคืนผลลัพธ์เดียวกันสำหรับบัญชีผู้ใช้ AD เดียวกัน:
Get-ADUser –Identity b.smith
Get-ADUser –Identity "CN=Brian Smith,OU=Users,OU=Berlin,DC=woshub,DC=loc"
Get-ADUser –Identity "Brian Smith"
ตามค่าเริ่มต้น cmdlet ของ Get-ADUser จะส่งคืนแอตทริบิวต์ผู้ใช้พื้นฐาน 10 รายการเท่านั้น (จากคุณสมบัติของบัญชีผู้ใช้มากกว่า 120 รายการ):DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, สถานะบัญชี (เปิดใช้งาน:จริง/เท็จ ตาม UserAccountControl AD แอตทริบิวต์) ฯลฯ ในกรณีนี้ เอาต์พุตของ cmdlet ไม่มีข้อมูลเกี่ยวกับเวลาของการเปลี่ยนรหัสผ่านผู้ใช้ครั้งล่าสุด
ในการดำเนินการค้นหา AD บนตัวควบคุมโดเมนเฉพาะ ให้ใช้ -Server ตัวเลือก:
Get-ADUser –Server DC01.woshub.com –Identity tstuser
หากคุณต้องการรับข้อมูลผู้ใช้จากโดเมน AD อื่น คุณต้องระบุชื่อตัวควบคุมโดเมนและข้อมูลรับรองเพื่อเข้าถึง:
$ADcred = Get-Credential
Get-ADUSer tstuser -Server DC01.contoso.com -Credential $ADcred
หากต้องการแสดงข้อมูลโดยละเอียดเกี่ยวกับแอตทริบิวต์ผู้ใช้ที่มีอยู่ทั้งหมด ให้เรียกใช้คำสั่งนี้:
Get-ADUser -identity tuser -properties *
Get-ADUser cmdlet ที่มี คุณสมบัติ * สวิตช์แสดงรายการแอตทริบิวต์และค่าของผู้ใช้ AD ทั้งหมด (รวมถึงค่าว่าง) รายการแอตทริบิวต์ผู้ใช้ที่คล้ายกันมีอยู่ในสแน็ปอินกราฟิกผู้ใช้ Active Directory และคอมพิวเตอร์ (dsa.msc
) ใต้แท็บตัวแก้ไขแอตทริบิวต์
จากนั้นเราจะไปที่การจัดรูปแบบของผลลัพธ์ Get-ADUser เพื่อแสดงแอตทริบิวต์ผู้ใช้ที่จำเป็น ตัวอย่างเช่น คุณต้องการแสดงค่าของคุณสมบัติผู้ใช้ต่อไปนี้:
- รหัสผ่านหมดอายุ
- PasswordLastSet
- รหัสผ่านไม่มีวันหมดอายุ
- LastLogonTimestamp
รันคำสั่ง:
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp
ตอนนี้ในข้อมูลผู้ใช้ มีข้อมูลเกี่ยวกับสถานะรหัสผ่านของบัญชี (หมดอายุ:จริง/เท็จ) วันที่เปลี่ยนรหัสผ่านล่าสุด และเวลาของผู้ใช้ล่าสุดที่เข้าสู่ระบบโดเมน (lastlogontimestamp
คุณลักษณะ). ในการแสดงข้อมูลนี้ในมุมมองตารางที่สะดวกยิ่งขึ้นและลบแอตทริบิวต์ที่ไม่จำเป็นทั้งหมด ให้ใช้ Select-Object –Property และ Format-Table :
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
Get-ADUser -SearchBase:การรับผู้ใช้จาก OU เฉพาะ
ในการแสดงผู้ใช้จากคอนเทนเนอร์โดเมนเฉพาะ (หน่วยขององค์กร) ให้ใช้ –SearchBase พารามิเตอร์:
Get-ADUser -SearchBase 'OU=London,DC=woshub,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
หากคุณต้องการเลือกผู้ใช้จาก OU หลายหน่วยพร้อมกัน ให้ใช้สคริปต์ PowerShell ต่อไปนี้:
$OUs = "OU=NY,DC=woshub,DC=com","OU=LA,DC=woshub,DC=com","OU=MA,DC=woshub,DC=com"
$OUs | foreach {Get-ADUser -SearchBase $_ -Filter * |select Name, Enabled}
จะรับที่อยู่อีเมลของผู้ใช้จาก AD โดยใช้ PowerShell ได้อย่างไร
ที่อยู่อีเมลของผู้ใช้เป็นหนึ่งในแอตทริบิวต์ของวัตถุผู้ใช้ใน Active Directory หากต้องการระบุที่อยู่อีเมลของผู้ใช้ คุณต้องเพิ่ม EmailAddress ให้กับคุณสมบัติของ Get-ADUser cmdlet
Get-ADUser -filter * -properties EmailAddress -SearchBase 'OU=Paris,OU-Fr,DC=woshub,DC=com'| select-object Name, EmailAddress
รายชื่อบัญชีผู้ใช้ที่เปิดใช้งานพร้อมที่อยู่อีเมล:
Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table
วิธีรับรายชื่อผู้ใช้ Active Directory ที่ไม่มีที่อยู่อีเมล:
Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null
ตัวอย่างต่อไปนี้ช่วยให้คุณสามารถส่งออกรายชื่ออีเมลของบริษัทจาก AD ไปยังไฟล์ CSV หลังจากนั้น คุณสามารถนำเข้ารายการที่อยู่ CSV นี้ไปยังโปรแกรมรับส่งเมลบนเดสก์ท็อป เช่น Outlook หรือ Mozilla Thunderbird:
Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\adress_list.csv
Get-ADUser:การส่งออกผู้ใช้ Active Directory เป็น CSV ด้วย PowerShell
รายการผลลัพธ์ของผู้ใช้โดเมนที่มีแอตทริบิวต์สามารถส่งออกไปยังไฟล์ข้อความได้:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt
หรือคุณสามารถส่งออกรายชื่อผู้ใช้ AD เป็นไฟล์ CSV:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name –like "*Dmitry*"} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\tmp\user-passwords-expires.csv -Append -Encoding UTF8
ตัวอย่างตัวกรอง Get-ADUser
การใช้ –ตัวกรอง สลับ คุณสามารถกรองรายการบัญชีผู้ใช้ตามแอตทริบิวต์หนึ่งรายการขึ้นไป ซึ่งมีประโยชน์สำหรับการค้นหาผู้ใช้ AD ที่มีแอตทริบิวต์ตรงกับเกณฑ์ที่ระบุ ค่าสำหรับแอตทริบิวต์เฉพาะของผู้ใช้ Active Directory สามารถระบุเป็นอาร์กิวเมนต์ของพารามิเตอร์นี้ได้ เมื่อคุณใช้ –Filter
พารามิเตอร์ Get-ADUser cmdlet จะแสดงเฉพาะผู้ใช้ที่ตรงกับเกณฑ์การกรอง
ตัวอย่างเช่น ฉันต้องการแสดงรายการบัญชีผู้ใช้ที่ใช้งานอยู่ (เปิดใช้งาน) ที่มีชื่อเป็น “Dmitry ” ตัวอย่างด้านล่างใช้ตัวกรองหลายตัว คุณสามารถรวมเงื่อนไขโดยใช้ตัวดำเนินการเปรียบเทียบ PowerShell แบบลอจิคัล ในตัวอย่างนี้ แอตทริบิวต์ผู้ใช้ต้องเป็นไปตามเงื่อนไขตัวกรองทั้งสอง (-และ ):
Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * |select name,enabled
ตัวดำเนินการทางลอจิคัล PowerShell ทั้งหมดสามารถใช้เพื่อเลือกค่าสำหรับแอตทริบิวต์ของผู้ใช้ (-eq
, -ne
, -gt
, -ge
, -lt
, -le
, -like
, -notlike
, -and
, -or
เป็นต้น)
นอกจากนี้ คุณสามารถจัดเรียงรายการผลลัพธ์ของผู้ใช้ตามแอตทริบิวต์ผู้ใช้เฉพาะด้วย Sort-Object cmdlet คุณยังสามารถใช้ Where-Object cmdlet เพื่อระบุเกณฑ์การกรองหลายรายการพร้อมกัน
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires -SearchBase 'OU=NY,DC=woshub,DC=com'| where {$_.name –like "*Dmitry*" -and $_.Enabled -eq $true} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
ดังนั้น คุณสามารถรับรายชื่อผู้ใช้ที่มีแอตทริบิวต์ Active Directory ที่จำเป็นได้
หากต้องการค้นหาผู้ใช้ด้วยแอตทริบิวต์ต่างๆ พร้อมกัน (legacyExchangeDN, proxyAddresses, SAMAccountName, Surname, DisplayName, SamAccountName, physicalDeliveryOfficeName, RDN และ msExchMailNickname) คุณสามารถใช้การจำแนกชื่อที่คลุมเครือ (ANR
) คุณสมบัติ:
Get-ADUser -Filter {anr -eq 'John'} | select Name
คุณสามารถใช้ตัวกรอง LDAP ในการสืบค้น Get-ADUser มีการระบุตัวกรอง LDAP โดยใช้ –LdapFilter แอตทริบิวต์
Get-ADUser -LDAPFilter '(&(department=it)(title=sysops))'
ตัวอย่าง PowerShell Get-ADUser
มาแสดงตัวอย่างคำสั่ง PowerShell ที่เป็นประโยชน์มากขึ้นสำหรับการสอบถามผู้ใช้ Active Directory ด้วยตัวกรองต่างๆ คุณสามารถรวมเข้าด้วยกันเพื่อรับรายการวัตถุผู้ใช้ AD ที่จำเป็น:
แสดงผู้ใช้ AD ที่มีชื่อขึ้นต้นด้วย Joe :
Get-ADUser -filter {name -like "Joe*"}
คุณสามารถใช้ PowerShell เพื่อคำนวณจำนวนบัญชีผู้ใช้ทั้งหมดใน Active Directory:
Get-ADUser -Filter {SamAccountName -like "*"} | Measure-Object
ค้นหาบัญชีผู้ใช้ Active Directory ที่ถูกปิดใช้งาน:
Get-ADUser -Filter {Enabled -eq "False"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table
คุณสามารถตรวจสอบวันที่สร้างบัญชีผู้ใช้ Active Directory ได้ด้วยคำสั่ง:
get-aduser -Filter * -Properties Name, WhenCreated | Select name, whenCreated
คุณสามารถรับรายชื่อผู้ใช้ Active Directory ที่เพิ่มใหม่ที่สร้างขึ้นใน 24 ชั่วโมงที่ผ่านมา:
$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter {(whencreated -ge $lastday)}
แสดงรายการบัญชีที่มีรหัสผ่านหมดอายุ (คุณสามารถกำหนดค่าตัวเลือกการหมดอายุของรหัสผ่านในนโยบายรหัสผ่านของโดเมน):
Get-ADUser -filter {Enabled -eq $True} -properties name,passwordExpired| where {$_.PasswordExpired}|select name,passwordexpired
งาน:สำหรับรายการบัญชีผู้ใช้ที่จัดเก็บไว้ในไฟล์ข้อความ (หนึ่งบัญชีต่อบรรทัด) คุณต้องรับชื่อบริษัทของผู้ใช้จาก AD และบันทึกลงในไฟล์ CSV (คุณสามารถนำเข้าไฟล์นี้ไปยัง Excel ได้อย่างง่ายดาย)
Import-Csv c:\ps\users_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, Company |
Select Name, Company |
Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}
ผู้ใช้ที่ไม่ได้เปลี่ยนรหัสผ่านโดเมนในช่วง 90 วันที่ผ่านมา:
$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}
ค้นหาบัญชีผู้ใช้ที่ไม่ใช้งาน (ไม่ได้เข้าสู่ระบบโดเมนนานกว่า 180 วัน) แอตทริบิวต์ lastLogonTimestamp ใช้เพื่อรับประวัติการเข้าสู่ระบบของผู้ใช้ไปยังโดเมน:
$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } | ?{$_.Enabled –eq $True} | Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize
หากต้องการรับรูปภาพของผู้ใช้จาก Active Directory และบันทึกเป็นไฟล์ jpg ให้เรียกใช้คำสั่งต่อไปนี้:
$usr = Get-ADUser sjoe -Properties thumbnailPhoto
$usr.thumbnailPhoto | Set-Content sjoe.jpg -Encoding byte
ในการรับรายชื่อกลุ่มโฆษณาที่บัญชีผู้ใช้เป็นสมาชิกของ:
Get-AdUser sjoe -Properties memberof | Select memberof -expandproperty memberof
รายชื่อผู้ใช้จาก OU ที่เป็นสมาชิกของกลุ่มความปลอดภัยของโดเมนเฉพาะ:
Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=woshub,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}
รายชื่อผู้ใช้จาก OU ที่เป็นสมาชิกของกลุ่มความปลอดภัยของโดเมนเฉพาะ:
Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=woshub,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}
รายชื่อผู้ใช้ทั้งหมดจาก OU ยกเว้นสมาชิกของกลุ่มเฉพาะ:
$Users = Get-ADUser -filter * -SearchBase ‘OU=Berlin,DC=woshub,DC=com’ -properties memberOf
ForEach ($User In $Users)
{
$Groups = -join @($User.memberOf)
If ($Groups -notlike '*Domain Admins*')
{
$User.Name
}
}
การส่งออกรายชื่อผู้ใช้ AD ที่มีชื่อหน่วยขององค์กรไปยังตาราง Out-GridView:
get-aduser -filter * -Properties cn,canonicalname | select name,userprincipalname,@{Name="OU";expression={$_.Canonicalname.substring(0,$_.canonicalname.length-$_.cn.length)}}| Out-GridView
ตรวจสอบว่ามีบัญชีผู้ใช้ AD อยู่:$SamAccountName='jbrown'
if (@(Get-ADUser -Filter { SamAccountName -eq $SamAccountName }).Count -eq 0)
{ Write-Host "User $SamAccountName doesn’t exist"}
แสดงรายการคอมพิวเตอร์โดเมนที่ผู้ใช้ได้รับอนุญาตให้ลงชื่อเข้าใช้ (ข้อจำกัดการเข้าสู่ระบบผ่านแอตทริบิวต์ AD ของ LogonWorkstations)
Get-ADUser jbrown -Properties LogonWorkstations | Format-List Name, LogonWorkstations