about_Windows_PowerShell_2.0
トピック
about_Windows_PowerShell_2.0
簡易説明
Windows PowerShell 2.0 に導入された新機能について説明します。
詳細説明
Windows PowerShell 2.0 には、その用途を広げ、利便性を高めると共に、Windows ベースの環境
をより簡単かつ総合的に管理できるようにする重要な機能が数多く導入されています。
Windows PowerShell 2.0 には下位互換性があります。Windows PowerShell 1.0 用に設計され
たコマンドレット、プロバイダー、スナップイン、スクリプト、関数、プロファイルなどは、Windows
PowerShell 2.0 でも変更することなく使用できます。
新機能
Windows PowerShell 2.0 には、次の新機能が追加されています。
リモート処理
Windows PowerShell 2.0 では、1 つの Windows PowerShell コマンドで、1 台または何台
ものリモート コンピューターにコマンドを実行できます。コマンドを 1 つずつ実行することはもちろ
ん、固定接続 (セッション) を作成して、関連した一連のコマンドを実行することもできます。入力し
たコマンドが直接リモート コンピューターで実行されるようにリモート コンピューターとのセッショ
ンを開始することもできます。
Windows PowerShell のリモート処理機能は、Windows Remote Management (WinRM) を基盤
としています。WinRM は、WS-Management プロトコル (SOAP をベースとするファイアウォール互
換の標準通信プロトコル) をマイクロソフトが実装したものです。
リモート コンピューターには、Windows PowerShell 2.0、Microsoft .NET Framework 2.0、
および WinRM サービスがインストールされている必要があります。リモート コマンドは、
Windows PowerShell を実行できるすべてのオペレーティング システムでサポートされます。現在
のユーザーには、リモート コンピューターに対してコマンドを実行するためのアクセス許可が付与さ
れている必要があります。詳細については、「about_Remote_Requirements」を参照してください。
リモート処理をサポートするために、Invoke-Command、Enter-PSSession、Exit-PSSession
のほか、PSSession を名詞とする各種のコマンドレットが追加されました。固定接続の作成と管理
には、これらのコマンドレットを使用できます。
また、Get-Process、Get-Service、Get-Eventlog など、いくつかのコマンドレットには、
ComputerName パラメーターが追加されました。このパラメーターを使用することによって、リモー
ト コンピューターに関する情報を取得できます。
これらのコマンドレットは、.NET Framework のメソッドを使用して、必要なデータを取得しま
す。Windows PowerShell のリモート処理には依存していません。新しいプログラムや構成は不要で
す。詳細については、各コマンドレットのヘルプを参照してください。
リモート コマンドの詳細については、「about_Remote」および「about_Remote_FAQ」を参照し
てください。セッションの詳細については、「about_PSSessions」を参照してください。
Windows PowerShell ISE
Windows PowerShell 2.0 には、Windows PowerShell Integrated Scripting Environment (ISE)
が導入されています。このホスト アプリケーションでは、コマンドを実行したり、構文が色付き
で表示される Unicode ベースのグラフィカルな環境でスクリプトの設計、記述、テスト、および
デバッグを行ったりできます。
Windows PowerShell ISE を使用するには、Microsoft .NET Framework 3.0 以降が必要です。
Windows PowerShell ISE は、次の要素で構成されます。
- コマンド ペイン: 対話型コマンドを Windows PowerShell コンソールとまったく同じ感覚で
実行できます。コマンドを入力し、Enter キーを押すだけの簡単な操作で、出力ペインに出力結果
が表示されます。
- スクリプト ペイン: 関数やスクリプトの作成、編集、デバッグ、実行を行うことができます。
- 複数のタブ: コマンド ペインとスクリプト ペインはタブごとに存在し、複数の作業を個別に行
うことができます。
Windows PowerShell ISE は、初級ユーザーと上級ユーザーのどちらのニーズにも対応できるよう
に設計されています。
バックグラウンド ジョブ
バックグラウンド ジョブは、非同期的に実行されるコマンドです。バックグラウンド ジョブを実行
すると、ジョブの完了を待たずに、すぐにコマンド プロンプトに戻ります。バックグラウンド ジョブ
機能を使用すると、複雑なコマンドをバックグラウンドで実行しておき、その間にセッションを他の作
業に費やすことができます。
バックグラウンド ジョブをローカル コンピューターまたはリモート コンピューターで実行し、その
結果をローカル コンピューターまたはリモート コンピューターに保存できます。ジョブをリモートか
ら実行するには、Invoke-Command コマンドレットを使用します。
Windows PowerShell には、Job という名詞を含んだ一連のコマンドレット (Job コマンドレッ
ト) があります。これらのコマンドレットは、バックグラウンド ジョブの作成、開始、管理、削除の
ほか、実行結果の取得に使用します。job コマンドレットの一覧を取得するには、次のコマンドを入力
します。
get-command *-job
バックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。
スクリプト デバッガー
Windows PowerShell 2.0 には、スクリプトおよび関数用のコマンドレット ベースのデバッガー
が備わっています。このデバッガーは、必要な情報がすべて開示された公開 API によってサポートさ
れており、これらの API を使用して、独自のデバッガーを構築したり、デバッガーをカスタマイズ、
拡張したりすることができます。
デバッガー コマンドレットでは、行、カラム、変数、コマンドなどにブレークポイントを設定できま
す。これらのコマンドレットを使用して、ブレークポイントの管理やコール スタックの表示を行うこ
とができます。条件付きのブレークポイントを作成したり、ブレークポイントにカスタム動作 (診断や
ログ記録用のスクリプトを実行するなど) を指定したりすることも可能です。
ブレークポイントに到達すると、Windows PowerShell は、実行を中断して、デバッガーを起動し
ます。デバッガーには、コードをステップ実行するための一連のカスタム コマンドが用意されていま
す。Windows PowerShell の標準的なコマンドを使用して変数の値を表示したり、コマンドレットを
使用して結果を調査したりすることもできます。
デバッグの詳細については、「about_Debuggers」を参照してください。
データ セクション
Windows PowerShell 2.0 用に設計されたスクリプトには、データをスクリプトのロジックから分
離する DATA セクションを実装することができます。新しい DATA セクションのデータは、Windows
PowerShell スクリプト言語の特定のサブセットに限定されます。
Windows PowerShell 2.0 では、DATA セクションはスクリプトの国際化のサポートに使用されま
す。DATA セクションを使用することによって、各国のユーザー インターフェイス言語に翻訳される
ユーザー メッセージ文字列を分離、識別することができます。
詳細については、「about_Data_Sections」を参照してください。
スクリプトの国際化
Windows PowerShell 2.0 は、スクリプトの国際化対応により、世界中のユーザーにより優れた機
能を提供します。スクリプトや関数で表示するメッセージやヘルプ テキストに、ユーザーに合った言
語を使用できるようになりました。
スクリプトの国際化機能とは、オペレーティング システムのユーザー インターフェイスのカルチャ
($PsUICulture) を実行中に照会し、対応する翻訳済みのテキスト文字列をインポートすることに
よって、ユーザーに合った言語を表示する機能です。
Data セクションを使用すると、テキスト文字列を容易に識別できるようにコードから分離すること
ができます。新しいコマンドレット ConvertFrom-StringData を使用することにより、テキスト文
字列を翻訳しやすいよう、ディクショナリに似たハッシュ テーブルへと変換できます。
詳細については、「about_Script_Internationalization」を参照してください。
WMI コマンドレット
Windows PowerShell 2.0 の Windows Management Instrumentation
(WMI) は、新たに次のコマンドレットが追加されるなど、機能が向上しています。
- Remove-WmiObject
- Set-WmiInstance
- Invoke-WmiMethod
Get-WmiObject コマンドレットには、新しいパラメーターが追加されました。すべての WMI コマ
ンドレットは、次のパラメーターをサポートします。
- EnableAllPrivileges
- Impersonation
- Authentication
- Authority
これらのパラメーターが追加されたことで、WMI に関連した操作のセキュリティ構成を、.NET
Framework クラス ライブラリの型を直接操作することなく、従来よりも細かく制御できるようにな
りました。
WMI コマンドレットを一覧表示するには、次のコマンドを入力します。
get-help *wmi*
各コマンドレットのヘルプを取得するには、get-help に続けてコマンドレット名を入力します。
Get-WinEvent コマンドレット
Get-WinEvent は、イベント ビューアーのログや、ローカル コンピューターおよびリモート コン
ピューター上の Windows イベント トレーシング (ETW) のイベント ログ ファイルからイベントを
取得するコマンドレットです。イベントは従来のイベント ログから取得できるほか、Windows Vista
で導入された Windows イベント ログから取得することも可能です。
Get-WinEvent を使用すると、ログ内のイベント、イベント ログ プロバイダー、およびイベント
ログを表すオブジェクトを取得できます。Get-WinEvent では、単一のコマンドで、異なるソースか
らのイベントを結合することができます。XML パス言語 (XPath)、XML、およびハッシュ テーブル
形式の高度なクエリがサポートされています。
Get-WinEvent には、Windows Vista または Windows Server 2008
Microsoft .NET Framework 3.5 が必須 が必要です。
Out-Gridview コマンドレット
Out-GridView は、他のコマンドの結果を対話操作のしやすいテーブルで表示するコマンドレットで
す。コマンドの実行結果に対し、検索、並べ替え、グループ化、フィルター処理などの対話操作を行う
ことができます。たとえば、Get-Process、Get-WmiObject、Get-WinEvent、Get-Eventlog な
どのコマンドの結果を Out-GridView に送った後、このテーブル機能を使用して、データを検証する
ことができます。
help out-gridview -full
Add-Type コマンドレット
Add-Type コマンドレットを使用すると、他の .NET Framework 言語のソース コードから
.NET Framework の型を Windows PowerShell に追加できます。
Add-Type は、型の作成元となるソース コードをコンパイルし、新しい .NET Framework 型を含
んだアセンブリを生成します。作成した .NET Framework 型は、.NET Framework が備えている標準的な
オブジェクト型と共に、Windows PowerShell のコマンドで使用できるようになります。
Add-Type を使用して、アセンブリをセッションに読み込み、そのアセンブリの型を Windows
PowerShell で使用することもできます。
Add-Type では、新しい .NET Framework 型を開発することだけでなく、C# ライブラリの
.NET Framework 型を使用したり、Win32 API にアクセスしたりすることもできます。
詳細については、「Add-Type」を参照してください。
イベント通知
Windows PowerShell 2.0 には、イベント通知の機能が導入されています。ユーザーは、
Windows PowerShell のイベント、WMI のイベント、.NET Framework のイベントなど、各種イ
ベントの登録とサブスクライブを行うことができます。さらに、管理イベントやシステム イベントを
リッスンしたり、転送したりできることに加えて、イベントに応じた処理を実行することも可能です。
開発者は、イベント アーキテクチャを使用して、状態変化の通知を受け取るアプリケーションを作成
できます。ユーザーは、各種のイベントをサブスクライブし、その内容に応じた処理を行うスクリプト
を作成することが可能です。
Windows PowerShell には、イベントの新規作成、イベントの取得とサブスクライブ、イベントの
登録と登録解除、イベントの待機、イベントの削除などを行うコマンドレットが用意されています。こ
れらのコマンドレットの詳細について参照するには、次のコマンドを入力してください。
get-command *-event
モジュール
Windows PowerShell モジュールを使用すると、Windows PowerShell のスクリプトを分割し、
それぞれが独立して完結した、再利用可能な単位として整理することができます。モジュールのコード
は、それ自身のコンテキストで実行されるので、セッションのリソース (変数、関数、エイリアスなど)
と競合することはありません。また、こうしたリソースを追加したり上書きしたりすることもありません。
モジュールの作成、配布、結合、共有、再利用などを通じて、単純なスクリプトから複雑
なアプリケーションまで構築することができます。
Windows PowerShell 2.0 には、モジュールの追加、取得、削除のためのコマンドレットに加え
て、モジュールのメンバーをエクスポートするコマンドレットが用意されています。モジュールに関連
したコマンドレットの詳細について参照するには、次のコマンドを入力してください。
get-command *-module*
トランザクション
Windows PowerShell 2.0 では、トランザクションがサポートされます。トランザクションを使用
すると、一連の操作全体を元に戻すことができます。トランザクションは、トランザクションをサポー
トする操作でのみ利用できます。トランザクションは、データベースやメッセージ キューイングのよ
うに、原子性、整合性、分離性、回復性を必要とするアプリケーションを想定して設計されています。
トランザクションをサポートするコマンドレットおよびプロバイダーには、UseTransaction とい
う新しいパラメーターがあります。トランザクションとして操作を開始するには、Start-
Transaction コマンドレットを使用します。その後、操作を実行するコマンドレットを使用する際
に、トランザクションに参加させるコマンドに対して UseTransaction パラメーターを指定しま
す。このパラメーターは、コマンドレットごとに指定する必要があります。
トランザクションのどこかで、いずれかのコマンドが失敗した場合は、Rollback-Transaction コ
マンドレットを使用して、トランザクションのすべてのコマンドを取り消します。
すべてのコマンドが成功した場合は、Commit-Transaction コマンドレットを使用して、そのコマ
ンドのアクションを確定します。
Windows PowerShell 2.0 には、トランザクションの開始、使用、コミット、およびロールバック
のためのコマンドレットが用意されています。これらのコマンドレットについては、次のコマンドを入
力してください。
get-command *transaction*
Windows PowerShell 1.0 との間の重要な変更点
-- HKLM\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine における
PowerShellVersion のレジストリ エントリの値が 2.0 に変更されました。
-- 新しいコマンドレットおよび変数が追加されました。この追加によって、プロファイルやスクリプ
トで使用されている変数や関数との競合が生じる可能性があります。
-- -IEQ 演算子による文字の比較では、大文字と小文字が区別されません。
-- Get-Command コマンドレットの既定の動作では、コマンドレットだけでなく関数も取得されます。
-- ユーザー インターフェイスを生成するネイティブ コマンドをパイプで Out-Host コマンドレッ
トに渡すことはできません。
-- Begin、Process、End、Dynamic Param といった新しい言語キーワードが、スクリプトや関数
で使用されている同様の単語と競合する可能性があります。これらの単語が言語キーワードとして解
釈されることによって、構文解析エラーが発生する場合があります。
-- コマンドレット名の解決方法が変更されました。Windows PowerShell 1.0 では、2 つの
Windows PowerShell スナップインから同じ名前のコマンドレットがエクスポートされた場合、
実行時エラーが発生します。Windows PowerShell 2.0 でこのコマンド名を入力すると、セ
ッションに最後に追加されたコマンドレットが実行されます。既定では実行されないコマンドを実行
するには、コマンドレット名を、生成元のスナップイン名またはモジュール名で修飾します。
-- 関数名の後に '-?' を指定すると、対応するヘルプ トピックが表示されます (その関数にヘルプ
トピックが含まれている場合)。
-- Microsoft .NET Framework のメソッドのパラメーターの解決方法が変更されました。
Windows PowerShell 1.0 では、オーバーロードが定義されている .NET メソッドを呼び出し
た結果、構文上最も適合するメソッドが複数見つかっても、エラーが報告されませんでした。
Windows PowerShell 2.0 では、あいまいさを指摘するエラーが報告されます。
また、Windows PowerShell 2.0 では、構文上最も適合するメソッドを選択するためのアルゴ
リズムが大幅に見直され、複数の候補が見つかる可能性は最小限に抑えられています。
-- パイプラインでコレクションを列挙し、パイプラインでそのコレクションを変更しようとすると、
Windows PowerShell から例外がスローされます。
たとえば、次のコマンドは Windows PowerShell 1.0 では正常に動作しますが、Windows
PowerShel 2.0 では、パイプラインの最初の反復処理でエラーになります。
$h = @{Name="Hello"; Value="Test"}
$h.keys | foreach-object {$h.remove($_)}
このエラーを防ぐには、$() 文字を使用して、列挙子のサブ式を作成します。次にその例を示します。
$($h.keys) | foreach-object {$h.remove($_)}
Windows PowerShell 2.0 の詳細については、次の Web サイトを参照してください。
-- Windows PowerShell Web サイト (英語ページの可能性があります)
https://go.microsoft.com/fwlink/?LinkID=106031
-- Windows PowerShell チーム ブログ (英語)
https://go.microsoft.com/fwlink/?LinkId=143696
関連項目
about_Data_Sections
about_Debuggers
about_Functions_Advanced
about_Jobs
about_Join
about_PSSessions
about_Remote
about_Script_Internationalization
about_Split