การใช้ PowerShell ฉันจะรับชื่อเต็มของผู้ใช้โดเมนที่เข้าสู่ระบบในปัจจุบัน (ไม่เพียง แต่ชื่อผู้ใช้) โดยไม่ต้องใช้โมดูล ActiveDirectory ได้อย่างไร
การใช้ PowerShell ฉันจะรับชื่อเต็มของผู้ใช้โดเมนที่เข้าสู่ระบบในปัจจุบัน (ไม่เพียง แต่ชื่อผู้ใช้) โดยไม่ต้องใช้โมดูล ActiveDirectory ได้อย่างไร
คำตอบ:
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
ผลตอบแทน:
John Doe
มีคุณสมบัติปิดบังอื่น ๆ (ส่วนใหญ่) ด้วยเช่นกัน สิ่งที่มีประโยชน์บางประการ:
ลอง:
[adsi]"WinNT://$dom/$usr,user" | select *
ฉันชอบคำตอบที่ยอมรับ แต่เพียงเพราะฉันต้องการลองทำเอง:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName
ผลตอบแทน:
FullName
--------
TheCleaner
หรือหากคุณต้องการไม่มีข้อมูลส่วนหัวและเป็นเพียงผลลัพธ์:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
สายการบินหนึ่งที่ใช้ Powershell 3.0:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
จากความคิดเห็นของคุณเกี่ยวกับคำตอบที่ยอมรับของ Craig620
ฉันต้องการสิทธิ์ผู้ดูแลโดเมนเพื่อเรียกใช้คำสั่งนี้หรือไม่ หรือผู้ใช้โดเมนสามารถเรียกใช้คำสั่งนี้ได้หรือไม่?
ดูเหมือนว่าคุณกำลังพยายามหลีกเลี่ยงการติดตั้งโมดูล PowerShell ในเวิร์กสเตชันของผู้ใช้ใช่ แต่ไม่คุณไม่จำเป็นต้องเป็นผู้ดูแลระบบโดเมนเพื่อค้นหาชื่อของคุณเองในโฆษณา คุณสามารถค้นหาข้อมูลใด ๆ ที่ปรากฏใน GAL ใน Outlook ได้รวมถึงชื่อเต็มในฐานะผู้ใช้มาตรฐาน
คุณสามารถค้นหาชื่อเต็มของผู้อื่นในฐานะผู้ใช้มาตรฐานในโฆษณา (ใช้Get-WmiObject Win32_userAccount
หากคุณต้องการหลีกเลี่ยงโมดูลโฆษณา) บัญชีบริการที่สอบถามโฆษณา (ก่อนบัญชีบริการที่ได้รับการจัดการ ) มักเป็นผู้ใช้โฆษณามาตรฐานที่ไม่มีสิทธิ์
การใช้ -match นั้นไม่ใช่ตัวเลือกที่ดีเนื่องจาก $ env: USERNAME ของ "ed" จะตรงกับ "fred" และ "edith" ใช้ -eq แทนการจับคู่แบบตรงทั้งหมดและเพิ่มในโดเมนหากจำเป็น ฉันใช้วนรอบ foreach ในตอนท้ายเพื่อตัดช่องว่างที่นำหน้าออกทั้งหมดเพื่อเป็นทางเลือกแทน "select fullname | ft -HideTableHeaders" ซึ่งจะพิมพ์บรรทัดใหม่ที่นำหน้าและต่อท้าย
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
หากคุณได้รับ. Net 3.5 หรือสูงกว่าเสมอ (ซึ่งคุณควรใช้กับ PowerShell v4.0 และสูงกว่า):
Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;
คลาสนั้นให้การเข้าถึงคุณสมบัติ LDAP ทั่วไปได้ง่ายมากดังนั้นคุณไม่จำเป็นต้องค้นหาสองครั้ง (ครั้งเดียวกับ WinNT และอีกครั้งด้วย LDAP) หรือใช้[ADSISearcher]
ทำการค้นหา LDAP หากคุณต้องการคุณสมบัติเพิ่มเติมที่ WinNT ไม่ได้ใช้ .
หากคุณไม่ต้องการใช้โมดูล Active Directory คุณไม่สามารถทำได้ เว้นแต่ว่าคุณต้องการลึกยิ่งขึ้นและดำเนินการค้นหา LDAP จริงกับตัวควบคุมโดเมน
ข้อมูลผู้ใช้อื่นใดนอกเหนือจากชื่อผู้ใช้จะถูกเก็บไว้ใน Active Directory และจะต้องมีการดึงข้อมูลที่นั่น
[ADSI]
อินเทอร์เฟซนั้นยาวกว่าโมดูลโฆษณามากและมันก็ไม่ได้ซับซ้อนทั้งหมดเหมือนคำตอบที่ได้รับการยอมรับ