かゆいところに手が届くようになった次世代コマンドシェル

Windows PowerShell

 

 Microsoftから次世代コマンドシェルとなるWindows PowerShellが公開された。現在はWindows XP用、Windows Server 2003用、それにWindows Vista用、それぞれに32bit版と64bit版が公開されている。ここでは、PowerShellのすべてを解説することはできないが、その概要だけを解説することにする。

 

●PowerShellとは

 PowerShellは次世代のコマンドシェルであり、やがては現在のコマンドプロンプトにとって代わるものだ。今のところ、PowerShellWindows XP/2003/Vistaにオプションでインストールする形になるが、次期サーバーOSLongHorn ServerVistaの後継デスクトップOS以降では、Windowsの標準機能として組み込まれるようになる予定だ。PowerShellがどういうものかは、なによりも使ってみるのが手っ取りはやい。PowerShellは次のURLからダウンロードできる。

http://support.microsoft.com/?kbid=926140

http://www.microsoft.com/downloads/details.aspx?FamilyID=c6ef4735-c7de-46a2-997a-ea58fdfcba63&DisplayLang=ja

http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=AF37D87D-5DE6-4AF1-80F4-740F625CD084

 なお、PowerShellはアプリケーションの開発・実行環境である.NET Framwork上で動作するので、.NET Framwork 2.0以上が必要になる (1.xは不可)。すでに.NET Framwork 1.xがインストールされていれば、それをアンインストールして、2.0以上 (現在は3.0がリリースされている) をインストールしてからPowerShellをインストールする。

 PowerShellが従来のコマンドプロンプトと決定的に違うのは、この.NET Framworkの機能を完全に利用している点だ。したがって.NET Framworkで提供されるAPIPowerShellから利用することで、コマンドプロンプトでできなかったシステム操作などの多彩な機能をPowerShellから実行できるようになった。従来のコマンドプロンプトでは管理系のコマンドが乏しく、GUIでの操作はできても、コマンドでの操作に限界があった。管理者にとってこれが一番の不満点だったはずだ。しかし、PowerShellを使えば、それが簡単にできるかどうかは別として、ほとんど何でもできるようになったので、これからの管理者にとって、PowerShellの知識は不可欠になるだろう。

 

●PowerShellの用語と基本操作

 PowerShellを起動するとコマンドプロンプトと似た画面が表示される。ウィンドウのサイズはかなり大きい。

 

デフォルトで起動したPowerShellの画面。かなりサイズが大きいが、好きな大きさにカスタマイズできる。

 

 コマンドプロンプトと同様に、このウィンドウをカスタマイズすることができる。以下の画面はカスタマイズした画面になる。それではまず、「dir」コマンドを入力してみよう。コマンドプロンプトと同様にフォルダ内のファイル/フォルダ情報が表示される。Linuxで使われるコマンドの「ls」と入力しても同じ結果になる。

 

dir」コマンドでも「ls」コマンドでもコマンドプロンプトと同様の結果になる。

 

 さらに「Get-ChildItem」と入力してみよう。やはり同じ結果になったはずだ。実は、PowerShellでの本来のコマンドは「Get-ChildItem」が正式なものだ。しかし、従来のコマンドプロンプトやLinuxのコマンドとの互換性を確保するために、dirおよびlsGet-ChildItemのエイリアス (別名) として登録されているので、こうしたコマンド名が使えるというわけだ。dirlsに限らず従来の内部コマンドのほとんどがエイリアスとして登録されているので、PowerShellをコマンドプロンプトと同様に使うことができる。もちろん外部プログラムはコマンドプロンプトと同様に起動できるし、GUIプログラムを起動することもできる。

 ただし、これからPowerShellを使いこなそうと思うならば、正式なコマンド名を覚えておいた方がよい。そもそも、PowerShellではコマンドと言わず、コマンドレットと呼ぶ。コマンドレットの基本書式は「動詞-名詞」という形になる。Get-ChilItemは、ChildItem (フォルダ情報) Get (取得) するコマンドレットということになる。同様に「Get-EventLog」コマンドレットなら、EventLogを取得するコマンドレットになる。Get-Helpならヘルプを表示する。代表的な名詞としては、この他にCommandServiceProcessItemなどがある。なお入力の際は、大文字と小文字を区別しないが、ここではわかりやすくするために、大文字と小文字を使い分けて表記する。

 PowerShellのコマンドレットでは、ファイルシステムだけでなく、イベントログやレジストリ、各種システムリソースなども同じようにアクセスできる。その他に、PowerShellでは、独自のコマンドレットを作成しスナップインとして組み込むこともできる。またC#に似たスクリプトを利用することで、従来のバッチファイルとは次元の異なる高度なバッチ処理ができる。

 PowerShellでもコマンドプロンプトと同様に、コマンドからコマンドへデータを引き渡すパイプ処理をサポートしている。そこで、もう1つPowerShellが従来のコマンドプロンプトと大きく違う点は、パイプ処理で扱うデータが従来のような単純なテキストデータではなく、オブジェクトであることだ。引き継いだコマンドは、そのオブジェクトのプロパティにアクセスすることで、必要なデーを取り出して処理することになる。

 PowerShellでは、配列や変数、演算子、関数、メソッド、プロパティなどを使うことができるが、ここでは解説する余裕がないので省略し、実際に役に立つコマンドレットをいくつか紹介することにする。なお、管理者権限を必要とする操作を行うためには、PowerShellのアイコンを右クリックして「管理者として実行」する必要がある。

 

●Get-Command

 単に「Get-Command」と入力すると利用できるコマンドレットが一覧表示される。「Get-Command -CommandType Alias」と入力すると、エイリアスの一覧が表示される。「Get-Command Verb Get*」と入力すれば "Get" で始まるコマンドレットの一覧が表示される。

 

Get-Command」と入力した結果 (一部)

 

Get-Command Verb Get*」と入力した結果。

 

●Get-Help

 コマンドレットの使い方を知りたい場合は、「Get-Help コマンドレット名」と入力すればよい。"-Detailed" オプションを付けるとより詳細な説明が表示される。"-Full" オプションではさらに詳細な説明が表示される。Get-Helpコマンドレットはhelpあるいはmanというエイリアスでも使用できる。

 

Get-Help Get-Service Detailes」と入力した結果 (一部)

 

●Get-Content | Select-Object

 Get-Contentコマンドレットでファイルの内容を所得し、SelectObjectコマンドレットでその一部を表示する。実際にはパイプを使って、「Get-Content c:\temp\genkou.txt | Select-Object -First 10」のように入力する。これでc:\temp\genkou.txtファイルの先頭の10行分が表示される。Get-Contenttypecatがエイリアスになっている。"-First" の代わりに "-Last" を指定すれば、ファイルの末尾が表示される。

 

Get-Content c:\temp\genkou.txt | Select-Object -First 10」と入力した結果。

 

●Set-Location

 Set-Locationコマンドレットでレジストリキーに移動して、Get-ChildItemコマンドレットでキー一覧を取得できる。具体的には「Set-Location HKCU:\Software\Microsoft」と入力してレジストリに移動し、「Get-ChildItem」と入力してキー一覧を取得する。

 

Set-Location HKCU:\Software\Microsoft」、次いで「Get-ChildItem」と入力した結果 (一部)

 

●Get-EventLog

 イベントログを取得するには「Get-EventLog Security」のように入力する。"Security" の代わりに "Application""System" なども使える。

 

Get-EventLog Security」と入力した結果 (一部)

 

●Get-WmiObject

 「Get-WmiObject」コマンドレットでは、インストールされているアプリケーションや、適用されているHotFix、スタートアップコマンド、アクティベート状態、ドメイン、共有フォルダ、BIOSCPU、メモリ、ハードディスクなどのソフトウェアやハードウェアに関する各種情報を取得することができる。

 インストールされているアプリケーションの情報を取得するには「Get-WmiObject Win32_Product」と入力する。ただし、これで表示できるのはWindows Installerでインストールされたものだけで、これが必ずしもインストールされたアプリケーションのすべてではないかもしれない。

 

Get-WmiObject Win32_Product」と入力した結果 (一部)

 

 BIOS情報を取得する場合は「Get-WmiObject Win32_BIOS」と入力する。CPU情報を取得する場合は「Get-WmiObject Win32_Processor」と入力すればよい。

 

powershell追加.bmp

Get-WmiObject Win32_BIOS」と入力して、BIOS情報を表示。さらに「Get-WmiObject Win32_Processor」と入力してCPU情報を取得した (一部)