現在のドメインユーザーのフルネームを取得する


23

PowerShellを使用して、ActiveDirectoryモジュールを使用せずに、現在ログオンしているドメインユーザーのフルネーム(ユーザー名だけでなく)を取得するにはどうすればよいですか?

回答:


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

戻り値:

John Doe

他の(ほとんど)不明瞭なプロパティも利用できます。いくつかの便利なもの:

  • Homedrive UNC
  • ホームドライブレター
  • 説明
  • ログインスクリプト

試してください:

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

3
いい答えだ。もちろん、これ ADを照会しています... :)
Massimo 14年

1
このコマンドを実行するにはドメイン管理者権限が必要ですか?または、ドメインユーザー自体がこのコマンドを実行できますか?
ジョナサン・リオー14年

1
すべてのドメインユーザーは、この種類の情報をADに照会できます。
マッシモ14年

1
@Massimoどのドメインユーザーも、この種類の情報をADに照会することはできません。ユーザーに「アカウント制限の読み取り」権限を付与(または拒否)することはできず、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

私はこれをあまりにも速く読みます、それ ADに問い合わせます。口頭で投票を取り消します。
MDMoore313

2
しかし、ADのPSモジュールを必要としない
squillman

3
@squillmanはそうではなく、ただCleanerに苦労をさせます。
MDMoore313 14年

わかった。申し訳ありませんが、カフェイン抜きされている必要があります...
squillman

7

Powershell 3.0を使用した1つのライナー:

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

3

Craig620の受け入れられた回答に対するコメントに基づいて、

このコマンドを実行するにはドメイン管理者権限が必要ですか?または、ドメインユーザー自体がこのコマンドを実行できますか?

ユーザーのワークステーションにPowerShellモジュールをインストールすることを避けようとしているようですが、ADでも自分の名前を調べるためにドメイン管理者である必要はありません。標準ユーザーとして、フルネームを含むOutlookのGALに表示されるほとんどすべての情報を検索できます。

ADで標準ユーザーとして他の人のフルネームを検索することもできます(Get-WmiObject Win32_userAccountADモジュールを回避する場合は、を使用します)。ADを照会するサービスアカウント(管理されたサービスアカウントよりも前)は、通常、標準の非特権ADユーザーです。


1

「ed」の$ env:USERNAMEは「fred」と「edith」に一致するため、-matchの使用は適切な選択ではありません。代わりに、完全一致に-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プロパティへの非常に簡単なアクセスを提供するため[ADSISearcher]、WinNTで実装されていない拡張プロパティが必要な場合、2回(WinNTで1回、LDAPで1回)検索したり、LDAP検索を行う必要はありません。


0

Active Directoryモジュールを使用したくない場合は使用できません。さらに詳しく調べて、ドメインコントローラーに対して実際のLDAPクエリを実行する場合を除きます。

ユーザー名以外のユーザー情報はすべてActive Directoryに保存され、そこで取得する必要があります。


しかし、スタートメニューを開くと、ユーザーのフルネームがここに表示されます!つまり、どこかに保存する必要がありますか?
ジョナサン・リュー

4
はい、どこかに保存されています。Active Directoryに保存されます。
キャサリンビリヤード14年

おそらくレジストリにも保存/キャッシュされますが、簡単には見つからず、あきらめました。
mfinni

1
それがADに保存されているのは事実ですが、[ADSI]インターフェースはADモジュールよりもずっと長く、受け入れられた答えのショーのように実際にはそれほど複雑ではありません。
ハンターエイドソン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.