【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のさまざまな使い方に関する資料を勉強会キットとしてアップロードしてあります。是非ダウンロードしてみてください。