Windows PowerShellの紹介

 

Windows PowerShellは、主にシステム管理者を対象に設計されたWindows の新しいコマンドライン シェルです。PowerShell には対話型のプロンプトとスクリプト環境が備えられており、これらは別々に使用することも、組み合わせて使用することもできます。

ほとんどのシェルではテキストを受け取って返しますが、Windows PowerShell は .NET 共通言語ランタイム (CLR) および .NET Framework 上に構築されているため、.NET オブジェクトを受け取って返すことができます。

Windows PowerShell では、シェルに組み込まれているシンプルな単一機能のコマンドライン ツールであるコマンドレットの概念が導入されています。それぞれのコマンドレットは個別に使用できますが、このシンプルなツールを組み合わせて複雑なタスクを実行することでコマンドレットの威力を発揮できます。Windows PowerShell には、100 を超える数の基本的なコア コマンドレットが付属しています。これに加えて、自分でコマンドレットを作成して他のユーザーと共有することもできます。

多くのシェルと同様、Windows PowerShell でも、コンピュータ上のファイル システムへのアクセスが提供されます。加えて、Windows PowerShell プロバイダにより、ファイル システムにアクセスするのと同じくらい簡単にレジストリやデジタル署名証明書ストアなどの他のデータ ストアにアクセスできます。

Windows PowerShell では、Windows コマンドライン プログラムを実行できます。メモ帳や電卓などの、グラフィック ユーザー インターフェイスを持つ Windows プログラムは、シェル内で起動できます。さらに、Cmd.exe を使用した場合と同じように、プログラムによって生成されるテキストをキャプチャしてそのテキストをシェルで使用することもできます。

 

 

Usage for Windows PowerShell

さて、とりあえず使ってみましょう。

 

まずはじめに、Windows PowerShellをDownload(下記“Where we get Windows PowerShell?”項目を参照)した後にインストールしてください。

次に、“スタート” – “Windows PowerShell 1.0” – “Windows PowerShell”メニューを選び、Windows PowerShell Command Prompt Windowを起動します。

以下のように文字列”abc”を入力すると、abcが返ってきます。

PS C:\>”abc”<Enter>

abc

今までのShellのようにただの文字列が返ってきているようにも見えますが、これはStringオブジェクトです。このことを検証してみましょう。

Windows PowerShell では、パイプ処理をほぼすべての状況で使用できます。画面にはテキストが表示されますが、コマンド間で受け渡しされる情報はテキストではありません。パイプの中を流れるデータは、実際にはオブジェクトです。

Windows PowerShell ではオブジェクトが主要な役割を果たすため、オブジェクトの種類に関係なく使用できるネイティブ コマンドがいくつか用意されています。その中で最も重要なコマンドが Get-Member です。

コマンドから返されたオブジェクトを解析するための最も簡単な方法は、そのコマンドの出力をパイプで Get-Member コマンドレットに渡すことです。Get-Member コマンドレットを実行すると、オブジェクトの正式な型名と、そのすべてのメンバの一覧が表示されます。非常に多くの要素が返される場合もあります。

以下のようにコマンドを入力してみてください。

PS C:\>”abc” | get-member<Enter>

TypeName: System.String

Name MemberType Definition

---- ---------- ----------

Clone Method System.Object Clone()

CompareTo Method System.Int32 CompareTo(Object value), System.Int32 CompareTo(String strB)

文字列”abc”を、パイプを通してGet-Memberコマンドへ渡した結果、上記のように”TypeName: System.String”と表示されましたので、文字列”abc”はStringオブジェクトであることが確認できます。

また、Get-MemberコマンドはStringオブジェクトを返しますので、今回のようにオブジェクトのTypeNameだけ知りたい場合には以下のようなコマンドを入力することにより必要な情報だけを返すこともできます。

PS C:\>”abc” | get-member | findstr “TypeName:”<Enter>

TypeName: System.String

文字列の先頭に’$’を付けると変数になります。この変数の型定義はありませんので、どのようなObjectも代入することができます。

以下のコマンドを入力することにより、変数$abcに文字列”abc”を代入した後、$abcに代入されたオブジェクトが何かを調べてみるとStringオブジェクトであることが確認できます。

PS C:\>$abc = “abc”

PS C:\>$abc | get-member | findstr “TypeName:”<Enter>

TypeName: System.String

下記コマンドを入力するとNotepad.exeが1つ起動されます。

PS C:\>notepad<Enter>

下記コマンドを入力すると、いま起動されたNotepad.exeのプロセス情報が表示されます。

PS C:\>get-process notepad<Enter>

Handles NPM(K) PM(K) WS(K) VM(K) CPU(s) Id ProcessName

------- ------- ----- ----- ----- ------ -- -----------

     65 7 2924 6892 98 0.02 2228 notepad

以下のコマンドを入力することにより、上記のコマンドが何を返してくるのかを調べることができます。

PS C:\>get-process notepad | get-member | findstr “TypeName:”<Enter>

TypeName: System.Diagnostics.Process

下記コマンドを入力すると、いま起動されたNotepad.exeのプロセスが削除されます。

PS C:\>get-process notepad | kill<Enter>

いかがでしょうか?簡単な説明ではございますが、パイプを通して文字列ではなくオブジェクトを受け渡すことの便利さを感じていただけましたら幸いです。

Where we get Windows PowerShell?

Windows PowerShellまたはWindows PowerShell関連の情報は、以下の場所から無料でDownloadして利用することができますので、どうぞ使ってみてください。

Windows PowerShell 1.0 Documentation Pack

https://www.microsoft.com/downloads/details.aspx?FamilyID=b4720b00-9a66-430f-bd56-ec48bfca154f&DisplayLang=en

(このドキュメント内に日本語翻訳されたものが入っております。)

Windows PowerShell Week Script Samples

https://www.microsoft.com/downloads/details.aspx?FamilyID=264ce487-1d36-4466-bd8b-23a7f1fa967e&DisplayLang=en

Windows PowerShell Week Magazine

https://www.microsoft.com/downloads/details.aspx?FamilyID=9fb32b6c-e847-4488-a242-d76bee92a21b&DisplayLang=en

x86 (JPN)

WindowsXP用Windows PowerShell 1.0インストールパッケージ(ローカライズ版)

https://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=30125a46-b97c-4704-aa10-605e809d5933

Windows Server 2003用Windows PowerShell 1.0インストールパッケージ(ローカライズ版)

https://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=c61fb27b-e71c-4ecf-9d2c-9b299b149490

x64 (JPN)

Windows XP x64 Edition用Windows PowerShell 1.0インストールパッケージ(ローカライズ版)

https://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=814f4d99-2036-4c8e-a0ce-0480b9976091

Windows Server 2003 x64 Edition用Windows PowerShell 1.0インストールパッケージ(ローカライズ版)

https://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=22e607f4-f854-497f-9548-770477e4b71d

x86 (English)

Windows PowerShell 1.0 English-Language Installation Package for Windows XP

https://www.microsoft.com/downloads/details.aspx?FamilyID=6ccb7e0d-8f1d-4b97-a397-47bcc8ba3806&DisplayLang=en

Windows PowerShell 1.0 English-Language Installation Package for Windows Server 2003

https://www.microsoft.com/downloads/details.aspx?FamilyID=10ee29af-7c3a-4057-8367-c9c1dab6e2bf&DisplayLang=en

x64 (English)

Windows PowerShell 1.0 English-Language Installation Package for Windows XP x64 Edition

https://www.microsoft.com/downloads/details.aspx?FamilyID=e9a90e13-c67c-42d7-b391-0e67dd67b83f&DisplayLang=en

Windows PowerShell 1.0 English-Language Installation Package for Windows Server 2003 x64 Edition

https://www.microsoft.com/downloads/details.aspx?FamilyID=8913eec8-b8ad-4889-ad85-a113f13441c5&DisplayLang=en

Itanium

Windows PowerShell 1.0 English-Language Installation Package for Windows Server 2003 for Itanium-based Systems

https://www.microsoft.com/downloads/details.aspx?FamilyID=3a804d57-2b54-4a47-93d4-a471e7108941&DisplayLang=en

Windows PowerShell 1.0 Multilingual User Interface Package for Windows Server 2003 for Itanium-based Systems

https://www.microsoft.com/downloads/details.aspx?FamilyID=29c265e9-f967-4e21-af2e-3f4d978a4e16&DisplayLang=en

Windows PowerShell 1.0 Localized Installation Package for Windows Server 2003 for Itanium-based Systems

https://www.microsoft.com/downloads/details.aspx?FamilyID=2fb5a053-d84c-4deb-9d67-658e2b7f24a5&DisplayLang=en

Windows Server 2003 for Itanium-based Systems用Windows PowerShell 1.0インストールパッケージ(ローカライス版)

https://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=2fb5a053-d84c-4deb-9d67-658e2b7f24a5