about_Methods
トピック
about_methods
簡易説明
Windows PowerShell でメソッドを使用してオブジェクトにアクションを実行する方法について説明し
ます。
詳細説明
Windows PowerShell では、"オブジェクト" と呼ばれる構造化された情報の集合体を使用して、
データ ストア内の項目やコンピューターの状態を表します。たとえば、Windows PowerShell
でファイルにアクセスする場合、実際のファイルを操作するのではなく、ファイルのプロキシ
として動作する FileInfo オブジェクトを操作します。
ほとんどのオブジェクトには、メソッドが含まれています。メソッドは、そのオブジェクトで実行
できるアクションを指定する命令の集まりです。たとえば、FileInfo オブジェクトには CopyTo
というメソッドがあります。このメソッドを使用すると、そのオブジェクトで表されるファイルを
コピーできます。
特定のオブジェクトに関連付けられたメソッドとメソッド定義のリストを表示するには、Get-Member
コマンドレットを使用します。ただし、このコマンドレットを使用するには、なんらかの形式でオ
ブジェクトが既に存在している必要があります。つまり、そのオブジェクトが変数によって表されて
いるか、Get-Member コマンドへの引数としてコマンドを指定したときに作成されたか、またはパイ
プラインを介して渡されている必要があります。たとえば、$a 変数に文字列値が割り当てられている、
つまり、この変数が文字列オブジェクトに関連付けられているとします。この場合に、オブジェクトの
メソッドのリストを表示するには、Windows PowerShell コマンド プロンプトで次のコマンドを入力します。
Get-Member -inputobject $a -membertype method
パイプライン経由で渡されたオブジェクトに関連付けられているメソッドとメソッド定義を表示する場合は、
次の例に示すようにパイプライン内で Get-Member コマンドを使用します。
Get-ChildItem c:\final.txt | Get-Member -membertype method
メソッドの呼び出しで最も一般的に使用されるのは、オブジェクトの参照情報 (変数や式など) の後に
メソッド名を指定する方法です。オブジェクトの参照情報とメソッドはピリオドで区切る必要がありま
す。また、メソッド名の直後に、メソッドに渡す必要のあるすべての引数を丸かっこで囲んで指定する
必要があります。
メソッド シグネチャに渡す引数がない場合は、空の丸かっこを使用します。
たとえば、次のコマンドは、GetType メソッドを使用して、$a 文字列オブジェクトに関連付けられた
データ型を返します。
$a.GetType()
GetType メソッドは任意のオブジェクトのデータ型を返し、変数は常にオブジェクトを表します。
オブジェクトの型は、その変数に保存されているデータの型に依存します。
変数を宣言した場合であっても、コマンドをパイプラインで連結した場合であっても、
Windows PowerShell で実行するすべてのアクションはオブジェクトに関連付けられます。
結果として、さまざまな状況でメソッドを使用できます。たとえば、次のコマンドのように、
メソッドを使用してプロパティ値に対するアクションを実行できます。
(Get-ChildItem c:\final.txt).name.ToUpper()
この場合、ToUpper メソッドが呼び出されるオブジェクトは、name プロパティに関連付けられた文字
列オブジェクトです (この例が正しく動作するためには、Final.txt ファイルが C: ドライブのルート
に存在する必要があります)。name プロパティは、実際には、Get-ChildItem コマンドによって返
される FileInfo オブジェクトのプロパティです。この例は、Windows PowerShell のオブジェクト
指向の特徴を示しているだけでなく、アクセス可能なオブジェクト上でのメソッドの呼び出し方法を
示しています。
次の例のように、Get-ChildItem コマンドの出力を変数に保存することによって、上の例と同じ結果を得
ることができます。
$a = (Get-ChildItem c:\final.txt).name
$a.ToUpper()
このコマンドでも、Get-ChildItem コマンドによって返されたファイル名を含む変数に
関連付けられた文字列オブジェクトの ToUpper メソッドを使用しています。
メソッドのアクションを指示するために、メソッドに引数が必要な場合があります。
たとえば、FileInfo オブジェクトには、ファイルをある場所から別の場所に移動
する手段を提供する MoveTo メソッドが含まれています。このメソッドには、
ファイルの移動先の場所を指定する引数が必要です。次のコマンドで、引数の
追加方法を示します。
(Get-ChildItem c:\final.txt).MoveTo("c:\techdocs\final.txt")
Get-ChildItem コマンドは、Final.txt ファイルの FileInfo オブジェクトを返してから、そ
のオブジェクトの MoveTo メソッドを使用して、アクションを開始し、ファイルの新しい場所を指定
します。
メソッドに関連付けられた引数を確認するには、対応するメソッド定義を調べます。メソッド定義には、
1 つ以上のメソッド シグネチャ (Microsoft .NET Framework ではオーバーロードとも呼ばれます)
が含まれています。メソッド シグネチャには、メソッドの名前と、メソッドの呼び出し時に指定する必要の
あるパラメーターが含まれています (該当するパラメーターがないこともあります)。Get-Member コマンド
レット表示内の各メソッド シグネチャはコンマで区切られています。たとえば、FileInfo クラスの CopyTo
メソッドには、次の 2 つのメソッド シグネチャが含まれています。
1. CopyTo(String destFileName)
2. CopyTo(String destFileName, Boolean overwrite)
最初のメソッド シグネチャは、ソース ファイルのコピー先のファイル名 (パスを含みます)
を受け取ります。次の例では、最初の CopyTo メソッドを使用して、Final.txt を
C:\Bin ディレクトリにコピーします。
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
コピー先に同じファイルが既に存在する場合、CopyTo メソッドは失敗し、Windows PowerShell によ
って次のエラーが報告されます。
"1" 個の引数を指定して "CopyTo" を呼び出し中に例外が発生しました: ファイル
'c:\bin\final.txt' は既に存在します。
2 番目のメソッド シグネチャでは、最初のケースと同様にコピー先のファイル名を渡しますが、それに加えて、
コピー先に存在する同名のファイルを上書きするかどうかを指定するブール値も渡します。次に例を示します。
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
ブール値を渡すときは、Windows PowerShell によって自動的に作成された $True 変数を使用する必
要があります。この $True 変数には、ブール値の "True" が格納されています (同様に、$False 変数にはブ
ール値の "False" が格納されています)。
関連項目
about_Objects
Get-Member