Poweshellでユーザー名を取得する方法と外部コマンド

コンピュータ
PowerShellのあれこれ

外部コマンドのwhoamiの結果を拾うという手もありますが、環境変数の$env:UserNameを参照するのが簡単そうです。

whoamiの戻り値はドメイン名/ユーザー名のようですが、環境変数で近い表現をする場合。

($env:USERDOMAIN + "\" + $env:USERNAME).ToLower()

とするとwhoamiと同じような結果になります。

そういえばPowershellスクリプト内で外部コマンドwhoamiの結果を変数で受け取るとように記述するとどうなるでしょう?

$a = whoami
Write-Host $a
Write-Host $a.GetType()

System.String

変数$aにwhoamiの結果が文字列として代入されていました。

そうなると他のコマンドも試してみたくなります。

$a = ping localhost
Write-Host $a
Write-Host $a.GetType()

 pcname [::1]に ping を送信しています 32 バイトのデータ: ::1 からの応答: 時間 <1ms  ::1 からの応答: 時間 <1ms  ::1 からの応答: 時間 <1ms  ::1 からの応答: 時間 <1ms   ::1 の ping 統計:     パケット数: 送信 = 4、受信
 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒):     最小 = 0ms、最大 = 0ms、平均 = 0ms
System.Object[]

今度は配列が返ってきました。件数と要素の型を確認してみます。

$a = ping localhost
Write-Host $a.Length
Write-Host $a[1]
Write-Host $a[1].GetType()

11
pcname [::1]に ping を送信しています 32 バイトのデータ:
System.String

配列の要素数が11件で要素の型は文字列です。各行が配列の要素になっているようです。

配列であればパイプラインでつないであげると、結果を加工して使うことも出来そうです。
まぁPINGの結果の書式を解析するのは面倒そうですが…

Powershellはシェルスクリプトなので当たり前なのですが、.batや.shなどと同じように外部コマンドを使った処理を表現出来る言語だということを知りました。

コメント