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を使用する1つのライナー:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
Craig620の受け入れられた答えに関するあなたのコメントに基づいて、
このコマンドを実行するには、ドメイン管理者権限が必要ですか?または、ドメインユーザー自体がこのコマンドを実行できますか?
ユーザーのワークステーションにpowershellモジュールをインストールしないようにしようとしているようですが、そうですが、いいえ、ADで自分の名前を検索するためにドメイン管理者である必要はありません。 OutlookのGALに表示されるほとんどの情報(フルネームを含む)を標準ユーザーとして検索できます。
ADの標準ユーザーとして他の人のフルネームを検索することもできます(ADモジュールを避けたい場合は、Get-WmiObject Win32_userAccount
を使用)。 ADをクエリするサービスアカウント(まあ、 管理されたサービスアカウント より前)は、通常、標準の非特権ADユーザーです。
「ed」の$ env:USERNAMEは「fred」および「edith」と一致するため、-matchの使用は適切な選択ではありません。代わりに-eqを使用して完全に一致させ、必要に応じてドメインに追加します。先頭の末尾の改行を出力する「select fullname | ft -HideTableHeaders」の代わりに、末尾のforeachループを使用して、先頭の末尾の空白をすべて削除します。
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Active Directoryモジュールを使用したくない場合は、使用できません。さらに深く、ドメインコントローラーに対して実際のLDAPクエリを実行する場合を除きます。
ユーザー名以外のユーザー情報はActive Directoryに保存され、そこから取得する必要があります。
([adsi]"LDAP://$(whoami /fqdn)").displayName
この非常にシンプルなツールを使用して、大量の情報を取得できます。チェックアウト
([adsi]"LDAP://$(whoami /fqdn)") | fl *