PowerShell 現在のユーザーを取得する

Migel Hewage Nimesha 2023年1月30日
  1. PowerShell で Win32_ComputerSystem クラスを使用して現在のユーザーを取得する
  2. PowerShell で環境変数を使用して現在のユーザーを取得する
  3. PowerShell で whoami コマンドを使用して現在のユーザーを取得する
PowerShell 現在のユーザーを取得する

Windows を使用する場合、ほぼ確実に、どのユーザーアカウントがいつかコンピューターにアクティブにサインインしているかを知る必要があります。ありがたいことに、PowerShell はリモートマシンまたはローカルマシンで現在のユーザーを取得できます。

PowerShell を使用せずにマシンにサインオンしている現在のユーザーを取得する方法はたくさんあります。PowerShell を使用すると、結果をオブジェクトとして扱うことで結果を変更することもできます。

たとえば、ユーザーの資格情報を要求するスクリプトを実行すると、PowerShell はユーザー名を動的に生成し、手動で入力するパスワードのみを残します。

PowerShell で Win32_ComputerSystem クラスを使用して現在のユーザーを取得する

PowerShell コマンドレット、つまり Get-CimInstanceGet-WMIObject を使用します。これらを使用すると、リモートコンピューターまたはローカルコンピューターで WMI(Windows Management Instrumentation)クラスを使用して現在のユーザーを取得できます。PowerShell の Win32ComputerSystem クラスに対応する次のコマンドレットのいずれかを呼び出して、現在のユーザーを取得します。

Username プロパティは、Win32ComputerSystem クラスの属性の 1つです。これを行うには、PowerShell を起動し、以下に示すコマンドを実行します。

Get-CimInstance:

(Get-CimInstance -ClassName Win32_ComputerSystem).Username

Get-WMIObject:

(Get-WMIObject -ClassName Win32_ComputerSystem).Username

出力:

DESKTOP-DelftStack\DefltStack

ここでは、両方のコマンドで同じ結果が得られます。ただし、上記のコマンドは、ユーザーが直接ログインしている場合にのみ結果を提供することに注意してください。リモートログインの場合、ユーザー名は空白になります。

PowerShell で環境変数を使用して現在のユーザーを取得する

PowerShell を使用してマシン上で現在のユーザーを取得する別の手法は、環境変数から情報を取得することです。現在のユーザーのユーザー名などの OS データは、環境変数で表されます。ただし、環境変数を操作する方法は主に 3つあります。どの方法でも同じ結果が得られます。

3つの方法は以下のとおりです。

  1. Env PowerShell ドライブ
  2. $env 変数
  3. .NET 環境クラス

上記の方法を以下にさらに説明する。

Env PowerShell ドライブ

環境変数は PowerShell によってキャッシュされ、PowerShell ドライブ(PSDrive)である Env:ドライブを介して利用できるようになります。PSDrive は、コンピューター上のドライブ(C:など)のようにアクセスできるストレージの場所ですが、PowerShell を介してのみアクセスできます。

PowerShell セッションを開始すると、Env:ドライブが自動的に作成されます。Env:はドライブであるため、Get-ChildItem コマンドレットを使用してそのコンテンツにアクセスできます。これは、ファイルシステムフォルダーまたはドライブのアイテムの一覧表示と同様に機能します。

次のコマンドを使用して、ユーザーを取得できます。

Get-ChildItem Env:\USERNAME

出力

Name                           Value
----                           -----
USERNAME                       DelftStack

値のみを取得するには、次のコマンドを使用できます。

(Get-ChildItem Env:\USERNAME).Value

出力:

DelftStack

コマンドがユーザー名の値を文字列として返すことがわかります。

$env 変数

もう 1つの方法は、env ドライブを変数として扱い、以下のコマンドを使用できるようにすることです。

$env:username

出力:

DelftStack

.NET 環境クラス

Environment クラスには、$ env 変数と同じ値(現在のユーザーのユーザー名)を持つ Username フィールドがあります。以下の PowerShell コマンドを実行して、username フィールドの値を取得します。

[System.Environment]::UserName

出力:

DelftStack

.NET WindowsIdentity クラス

Windows で現在のユーザーを取得するために実行するもう 1つのクラスは、WindowsIdentity クラスです。GetCurrentname メソッドがあり、以下のように使用できます。

([System.Security.Principal.WindowsIdentity]::GetCurrent().Name).Split('\')[1]

出力:

DelftStack

PowerShell で whoami コマンドを使用して現在のユーザーを取得する

whoami コマンドは、%WINDIR%\System32 フォルダーにある実行可能ファイルであり、ファイルの名前は whoami.exe です。以下のコマンドを実行すると、ドメイン/ユーザー名の形式のユーザー名になります。

whoami

出力:

DESKTOP-DelftStack\DefltStack
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

関連記事 - PowerShell User