オブジェクトを理解することは、PowerShell を「取得」するための基本概念の 1 つです。オブジェクトと、それらのオブジェクトによって PowerShell が現在存在する他のシェルよりもどのように優れているかを説明しますので、ぜひご参加ください。
このシリーズの以前の記事を必ずお読みください。
今週はシリーズの残りの部分もお楽しみに。
オブジェクト
PowerShell が、Bash のような従来の Linux シェルや従来のコマンド プロンプトと何が違うのか疑問に思ったことはありますか?答えは非常に簡単です。従来のシェルはテキストを出力するため、書式設定やフィルタリングなどの作業が困難になります。もちろん、作業を完了するのに役立つツールはあります (sed や grep が思い浮かびます)。しかし、結局のところ、何らかの種類の重いテキストの解析を実行したい場合は、次のような正規表現を知る必要があります。手の甲。
PowerShell は、基礎となる .Net フレームワークを利用し、テキストの代わりにオブジェクトを使用するという異なるアプローチを採用します。オブジェクトは何かを表現したものにすぎません。部品とそれを使用するためのアクションの集合です。自転車の部品とその使い方を見てみましょう。
.Net のオブジェクトは、2 つの小さな違いを除いてほとんど同じです。「部品」は プロパティ と呼ばれ、「命令」は メソッド と呼ばれます。 Windows サービスをオブジェクトとして表現したい場合は、サービス名、状態、説明の 3 つのプロパティを使用してそれを記述することが適切であると判断する場合があります。また、サービスと対話する必要があるため、オブジェクトに Start、Stop、Pause メソッドを与えることもあります。
オブジェクトのプロパティとメソッドを確認するには、オブジェクトを Get-Member コマンドレットに渡します。 PowerShell コマンドレットが出力するオブジェクトの大部分は、.Net Framework の基礎となる型ですが、C# などの言語を使用する必要がある場合や PSObject 型を使用する必要がある場合は、独自のオブジェクトを作成できます。
パイプライン
パイプラインを備えた Linux シェルは数多くあり、あるコマンドが出力したテキストを入力としてパイプライン内の次のコマンドに送信できます。 PowerShell は、あるコマンドレットが出力するオブジェクトを取得し、それらをパイプライン内の次のコマンドレットに入力として渡すことを可能にすることで、これを次のレベルに引き上げます。重要なのは、コマンドレットが返すオブジェクトの種類を知ることです。Get-Member コマンドレットを使用する場合、これは非常に簡単です。
サービスを受ける |メンバーの取得
この記事の範囲を超える理由により、プロパティとメソッドは総称してクラス メンバーと呼ばれます。これが、オブジェクトが持つすべてのメソッドとプロパティのリストを取得するために Get-Member コマンドレットを使用する理由を説明しています。ただし、Get-Member コマンドレットは、基になるオブジェクトの種類という別の重要な情報も返します。上のスクリーンショットでは、Get-Service が次のタイプのオブジェクトを返すことがわかります。
System.ServiceProcess.ServiceController
PowerShell はテキストではなくオブジェクトを扱うため、パイプラインを使用してすべてのコマンドレットをリンクできるわけではありません[1]。つまり、パイプラインから System.ServiceProcess.ServiceController オブジェクトを受け入れるコマンドレットを見つける必要があります。
Get-Command -ParameterType System.ServiceProcess.ServiceController
Stop-Service というコマンドレットがあることに注意してください。それについてのヘルプを見てみましょう。
Get-Help –Name Stop-Service
InputObject パラメータは ServiceController オブジェクトの配列を入力として受け取るようです。通常、InputObject というパラメーターが表示されると、パイプラインからの入力を受け入れますが、念のためにそのパラメーターの完全なヘルプを見てみましょう。
Get-Help -Name Stop-Service –Full
私たちの疑いは正しかったのです。したがって、この時点で次のことがわかります。
- Get-Service は ServiceController オブジェクトを返します
- Stop-Service には、1 つ以上の ServiceController を入力として受け入れる、InputObject というパラメーターがあります。
- InputObject パラメーターはパイプライン入力を受け入れます。
この情報を使用すると、次のことが可能になります。
Get-Service -Name ‘Apple Mobile Device’ |サービス停止
皆さん、今回はここまでです。次回は、パイプライン内のオブジェクトをフォーマット、フィルター、比較する方法を見ていきます。
宿題
ご質問がございましたら、 @taybgibb にツイートしていただくか、コメントを残してください。





