【PowerShell】$result = ipconfig /all これは便利!

システム管理者のファーム時代の恋人といえば? はい、まぎれもなく ipconfig コマンドです。ipcofig コマンドを使用するとネットワークカードの設定がざくっとみられるので、科学万能の現代であってもとても便利です。

ipconfigコマンドを使っていると、その出力結果の一部を再利用したい!なんて思うことがあります。

そんなときには迷わずPowerShellコンソールを使ってください。

PowerShell コンソールを使用すれば、コマンドレットに限らず、古のDOS系コマンドの出力結果もオブジェクトとしてゲット!することができます。

まずは、PowerShell コンソールで以下のように入力してみましょう。

PS C:\> $result = ipconfig /all

これで、ipconfig /all の結果は、$result というオブジェクトに格納されました。以下のように入力すれば $result の結果が表示されます。

PS C:\> $result

Windows IP 構成

   ホスト名 . . . . . . . . . . . . : junichia-bandit ・ ・ ・

で、本領発揮はこれからです。$result はオブジェクトであるということを思い出してください。

まずはipconfigコマンドの出力結果が何行あるのか確認してみましょう。

PS C:\> $result .Count 121

ループ処理なんて一切使わずに、「121行!」という結果をえることができました。感動です。

$result の中の 21行目だけが欲しいとしましょう。そんなときは、以下のように入力します。
※1行目は「0」ですから、21行目は「20」ですよね

PS c:\> $result [20]    物理アドレス. . . . . . . . . . . : 00-1E-3D-F8-1E-41

さらに、上の結果から「00-1E-3D-F8-1E-41」だけが欲しいとしましょう。

PS C:\> $result[20].Split(":")[1] 00-1E-3D-F8-1E-41

これは、$result[20]の結果を、「:(コロン)」で2つに区切り、2つ目の値を抜き出しています。

で、出力結果を見ると左端に空白が入っています。これ、邪魔ですね。

なので、次のようにします。

PS C:\> $result[20].Split(":")[1].Trim() 00-1E-3D-F8-1E-41

Trim() で、両端の空白をすっぱり削除しました。

どうです?たまらないですよね。

もう、DOSプロンプトに戻れそうにありません。

PowerShell と聞くと「スクリプトはなぁ」と拒絶反応を示す方もいらっしゃいますが、こんな処理がたった1行でできてしまうなんて、三田村邦彦くらい素敵ですね。

参考までに、PowerShellのさまざまな使い方に関する資料を勉強会キットとしてアップロードしてあります。是非ダウンロードしてみてください。