回答:
$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を使用した1つのライナー:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
Craig620の受け入れられた回答に対するコメントに基づいて、
このコマンドを実行するにはドメイン管理者権限が必要ですか?または、ドメインユーザー自体がこのコマンドを実行できますか?
ユーザーのワークステーションにPowerShellモジュールをインストールすることを避けようとしているようですが、ADでも自分の名前を調べるためにドメイン管理者である必要はありません。標準ユーザーとして、フルネームを含むOutlookのGALに表示されるほとんどすべての情報を検索できます。
ADで標準ユーザーとして他の人のフルネームを検索することもできます(Get-WmiObject Win32_userAccount
ADモジュールを回避する場合は、を使用します)。ADを照会するサービスアカウント(管理されたサービスアカウントよりも前)は、通常、標準の非特権ADユーザーです。
「ed」の$ env:USERNAMEは「fred」と「edith」に一致するため、-matchの使用は適切な選択ではありません。代わりに、完全一致に-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プロパティへの非常に簡単なアクセスを提供するため[ADSISearcher]
、WinNTで実装されていない拡張プロパティが必要な場合、2回(WinNTで1回、LDAPで1回)検索したり、LDAP検索を行う必要はありません。
Active Directoryモジュールを使用したくない場合は使用できません。さらに詳しく調べて、ドメインコントローラーに対して実際のLDAPクエリを実行する場合を除きます。
ユーザー名以外のユーザー情報はすべてActive Directoryに保存され、そこで取得する必要があります。
[ADSI]
インターフェースはADモジュールよりもずっと長く、受け入れられた答えのショーのように実際にはそれほど複雑ではありません。