オタク学校の学習PowerShellでオブジェクトを使用する方法
オブジェクトを理解することは、PowerShellを「取得する」ための基本概念の1つです。オブジェクトを探索し、それらがPowerShellを他のどのシェルよりも優れたものにするかについて、今すぐご参加ください。.
シリーズの前の記事を必ず読んでください。
- PowerShellを使用してWindowsを自動化する方法を学ぶ
- PowerShellでコマンドレットを使用する方法
そして、シリーズの残りの部分を一週間中お楽しみに.
オブジェクト
PowerShellがBashのような伝統的なLinuxシェル、あるいは従来のコマンドプロンプトと異なる点は何ですか。答えは非常に単純です。従来のシェルはテキストを出力するため、フォーマットやフィルタリングなどを行うことが困難です。もちろん、仕事を終わらせるのに役立つツールもあります(sedとgrepが頭に浮かぶ)が、結局のところ、何らかの種類のヘビーテキストの構文解析をしたい場合は、次のような正規表現を知る必要があります。あなたの手の甲.
PowerShellは、基盤となる.Netフレームワークを利用し、テキストの代わりにオブジェクトを使用して異なるアプローチを取ります。オブジェクトは単なる表現です。それらはそれらを使用するためのパーツとアクションの集合です。自転車の部品とその使用方法を見てみましょう。.
2つの小さな違いを除けば、.NETのオブジェクトはほとんど同じです。 プロパティ そして「指示」は呼ばれます 方法. Windowsサービスをオブジェクトとして表現したい場合は、Service Name、State、Descriptionの3つのプロパティを使用してそれを記述するのが適切であると判断するかもしれません。また、サービスと対話する必要があるので、オブジェクトにStart、Stop、およびPauseメソッドを指定します。.
オブジェクトのプロパティとメソッドは、Get-Memberコマンドレットに渡すことで確認できます。 PowerShellコマンドレットが出力するオブジェクトは、主に.NETフレームワークの基になる型ですが、C#などの言語を使用する必要がある場合、またはPSObject型を使用する必要がある場合は、独自のオブジェクトを作成できます。.
パイプライン
パイプラインを備えたたくさんのLinuxシェルがあり、あるコマンドが出力したテキストを入力としてパイプラインの次のコマンドに送ることができます。 PowerShellでは、1つのコマンドレットが出力するオブジェクトを受け取り、それらを入力としてパイプラインの次のコマンドレットに渡すことができるので、これを次のレベルに引き上げることができます。コツは、コマンドレットから返されるオブジェクトの種類を知ることです。これは、Get-Memberコマンドレットを使用するときに非常に簡単です。.
Get-Service |会員になる
この記事の範囲を超えた理由で、プロパティとメソッドはまとめてクラスメンバーと呼ばれます。これは、Get-Memberコマンドレットを使用してオブジェクトが持つすべてのメソッドとプロパティの一覧を取得する理由を説明しています。ただし、Get-Memberコマンドレットは、もう1つの重要な情報、基本となるオブジェクトの種類も返します。上のスクリーンショットでは、Get-Serviceが次の型のオブジェクトを返すことがわかります。
System.ServiceProcess.ServiceController
PowerShellはテキストではなくオブジェクトを処理するため、パイプラインを使用してすべてのコマンドレットをリンクできるわけではありません[1]。つまり、パイプラインからSystem.ServiceProcess.ServiceControllerオブジェクトを受け取るようにしているコマンドレットを見つける必要があります。.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Stop-Serviceというコマンドレットがあります。それのための助けを見てみましょう.
Get-Help -Nameサービス停止
InputObjectパラメーターは、入力としてServiceControllerオブジェクトの配列を受け取るように見えます。通常、InputObjectという名前のパラメータが表示されている場合、それはPipelineからの入力を受け付けますが、そのパラメータの完全なヘルプを見てみましょう。.
Get-Help -Nameサービス停止-Full
私たちの疑いは正しかった。それで、この時点で我々は以下を知っています:
- Get-ServiceはServiceControllerオブジェクトを返します
- Stop-Serviceには、入力として1つ以上のServiceControllerを受け入れるInputObjectという名前のパラメーターがあります。.
- InputObjectパラメーターはパイプライン入力を受け入れます.
この情報を使用して、次のことが可能になります。
Get-Service -Name 'Apple Mobile Device' |サービス停止
今回はこれですべてです。次回は、Pipelineでオブジェクトをフォーマット、フィルタ、比較する方法を見ていきます。.
宿題
- オブジェクトパイプラインを読む
質問がある場合は@taybgibbにツイートするか、コメントを入力してください。.