ดึงชื่อเต็มของผู้ใช้โดเมนปัจจุบัน


23

การใช้ PowerShell ฉันจะรับชื่อเต็มของผู้ใช้โดเมนที่เข้าสู่ระบบในปัจจุบัน (ไม่เพียง แต่ชื่อผู้ใช้) โดยไม่ต้องใช้โมดูล ActiveDirectory ได้อย่างไร

คำตอบ:


24
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname

ผลตอบแทน:

John Doe

มีคุณสมบัติปิดบังอื่น ๆ (ส่วนใหญ่) ด้วยเช่นกัน สิ่งที่มีประโยชน์บางประการ:

  • Homedrive UNC
  • จดหมาย Homedrive
  • ลักษณะ
  • สคริปต์การเข้าสู่ระบบ

ลอง:

[adsi]"WinNT://$dom/$usr,user" | select *

3
คำตอบที่ดี. แน่นอนนี่กำลังสืบค้น AD ... :)
Massimo

1
ฉันต้องการสิทธิ์ผู้ดูแลโดเมนเพื่อเรียกใช้คำสั่งนี้หรือไม่ หรือผู้ใช้โดเมนสามารถเรียกใช้คำสั่งนี้ได้หรือไม่?
Jonathan Rioux

1
ผู้ใช้โดเมนใด ๆ สามารถสอบถามโฆษณาสำหรับข้อมูลประเภทนี้
Massimo

1
@Massimo ผู้ใช้โดเมนใด ๆ ไม่สามารถสืบค้นโฆษณาสำหรับข้อมูลประเภทนี้ ผู้ใช้ไม่สามารถรับ (หรือปฏิเสธ) สิทธิ์ "อ่านข้อ จำกัด บัญชี" และไม่สามารถสืบค้นข้อมูลใด ๆ จาก Active Directory
Ian Boyd

15

ฉันชอบคำตอบที่ยอมรับ แต่เพียงเพราะฉันต้องการลองทำเอง:

$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

ฉันอ่านมันเร็วเกินไปมันจะสืบค้นโฆษณา ฉันถอนการลงคะแนนด้วยวาจาของฉัน
MDMoore313

2
แต่ไม่ต้องการโมดูล AD PS
squillman

3
@squillman มันไม่เพียง แต่ให้ Cleaner เป็นช่วงเวลาที่ยากลำบาก
MDMoore313

Gotcha ขออภัยต้อง decaffeinated ...
squillman

7

สายการบินหนึ่งที่ใช้ Powershell 3.0:

gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders

3

จากความคิดเห็นของคุณเกี่ยวกับคำตอบที่ยอมรับของ Craig620

ฉันต้องการสิทธิ์ผู้ดูแลโดเมนเพื่อเรียกใช้คำสั่งนี้หรือไม่ หรือผู้ใช้โดเมนสามารถเรียกใช้คำสั่งนี้ได้หรือไม่?

ดูเหมือนว่าคุณกำลังพยายามหลีกเลี่ยงการติดตั้งโมดูล PowerShell ในเวิร์กสเตชันของผู้ใช้ใช่ แต่ไม่คุณไม่จำเป็นต้องเป็นผู้ดูแลระบบโดเมนเพื่อค้นหาชื่อของคุณเองในโฆษณา คุณสามารถค้นหาข้อมูลใด ๆ ที่ปรากฏใน GAL ใน Outlook ได้รวมถึงชื่อเต็มในฐานะผู้ใช้มาตรฐาน

คุณสามารถค้นหาชื่อเต็มของผู้อื่นในฐานะผู้ใช้มาตรฐานในโฆษณา (ใช้Get-WmiObject Win32_userAccountหากคุณต้องการหลีกเลี่ยงโมดูลโฆษณา) บัญชีบริการที่สอบถามโฆษณา (ก่อนบัญชีบริการที่ได้รับการจัดการ ) มักเป็นผู้ใช้โฆษณามาตรฐานที่ไม่มีสิทธิ์


1

การใช้ -match นั้นไม่ใช่ตัวเลือกที่ดีเนื่องจาก $ env: USERNAME ของ "ed" จะตรงกับ "fred" และ "edith" ใช้ -eq แทนการจับคู่แบบตรงทั้งหมดและเพิ่มในโดเมนหากจำเป็น ฉันใช้วนรอบ foreach ในตอนท้ายเพื่อตัดช่องว่างที่นำหน้าออกทั้งหมดเพื่อเป็นทางเลือกแทน "select fullname | ft -HideTableHeaders" ซึ่งจะพิมพ์บรรทัดใหม่ที่นำหน้าและต่อท้าย

gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}

1

หากคุณได้รับ. 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 ไม่ได้ใช้ .


0

หากคุณไม่ต้องการใช้โมดูล Active Directory คุณไม่สามารถทำได้ เว้นแต่ว่าคุณต้องการลึกยิ่งขึ้นและดำเนินการค้นหา LDAP จริงกับตัวควบคุมโดเมน

ข้อมูลผู้ใช้อื่นใดนอกเหนือจากชื่อผู้ใช้จะถูกเก็บไว้ใน Active Directory และจะต้องมีการดึงข้อมูลที่นั่น


แต่เมื่อฉันเปิดเมนูเริ่มต้นชื่อเต็มของผู้ใช้จะแสดงที่นี่! ฉันหมายความว่าจะต้องเก็บไว้ที่ไหนสักแห่ง?
Jonathan Rioux

4
ใช่มันถูกเก็บไว้ที่ไหนสักแห่ง มันถูกเก็บไว้ใน Active Directory
Katherine Villyard

มันอาจจะเก็บ / แคชในรีจิสทรีด้วย แต่ฉันไม่พบมันง่ายและยอมแพ้
mfinni

1
มันเป็นความจริงที่เก็บไว้ใน AD แต่[ADSI]อินเทอร์เฟซนั้นยาวกว่าโมดูลโฆษณามากและมันก็ไม่ได้ซับซ้อนทั้งหมดเหมือนคำตอบที่ได้รับการยอมรับ
ฮันเตอร์ Eidson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.