見出し画像

オブジェクトってなに?

PowerShellの戻り値は「オブジェクト」です、って言われます。
初めてコマンドレットの実行結果を見たとき思いました。

文字じゃん。

今回のお話し

そんな過去を振り返りながら、オブジェクトの概念のお話しです。
概念を理解できると、PowerShellの理解が早くなるかなと、個人的には思っています。

結論から書くと、「オブジェクトは情報の塊」と思っていただければ、大体あってると思います。
(個人の感想です♪)

画面に表示されるもの

PowerShellの戻り値は「オブジェクト」なので、とりあえずコマンドレットを実行して確認してみましょう。
PowerShellコンソールから「Get-ChildItem c:\」のコマンドを実行します。

Get-Chileditem c:\
実行結果

エクスプローラでCドライブを確認した時と同じ情報(フォルダ名やタイムスタンプ)が確認できています。
でも見た感じは、情報の塊でも何でもないです。

それもそのはず、画面に表示されるのは「オブジェクトの情報が出力された結果」です。

オブジェクトを変数に格納

という訳で、「出力される前」の状態にしてみます。

一旦、「$dir」という変数を指定して情報を格納します。
変数はそのうち書くつもりですので、とりあえず「$dir = Get-ChildItem c:\」を実行してみてください。

$dir = Get-ChildItem c:\
実行結果

さっきと違い、情報は出力されません。

$dirには「Get-ChildItem c:\」 の実行結果が「出力される前」の状態=オブジェクトが格納されました。
$dirを実行すると、格納された情報が確認できます。

実行結果

このままだと、「Get-ChildItem c:\」を実行しているのとあんまり変わらないので、他の情報を取り出してみましょう。

変数に「0」をつけて実行します。

$dir[0]
実行結果

1行だけ表示されますね。
これはオブジェクトの「0番目」を表示している状態です。

実は「Get-ChildItem c:\」の実行結果は、表示されたものが1つのオブジェクトではなく、1行それぞれが別のオブジェクトです。

PowerShellでは「Get-ChildItem c:\」以外でも、画面に表示さえる1行1行がオブジェクトとなります。

今回の$dirには、複数のフォルダオブジェクトが格納されました。
複数のオブジェクトから個別にオブジェクトを取得する場合は番号を指定します。

どんなオブジェクトは0番目から情報が始まりますので、1番最初の情報を取得するには「0」、2番目の情報は「1」を指定してください。

こんな感じで、オブジェクトは「出力される前」の状態ですと、欲しい情報をとりやすくなります。

オブジェクトの中身をもう少し詳しく

他にどんな情報があるか確認したいので、$dir[0]に|(パイプ)で「fl *」をつけて実行してみます。
「fl *」は「Format-List *」の略で、オブジェクトの情報をリスト形式で全て表示します。
(ちなみに今までの画面はテーブル形式です。)

$dir[0]|fl *
実行結果

なんか沢山出てきました。

PowerShellコンソール上では1行にしか見えない情報でも、オブジェクトは、他にも情報を持っています。

これが「オブジェクトは情報の塊」で大体あっている発言の所以です。

オブジェクトに格納されている情報を確認するには?

簡単に確認できる方法を2つほど紹介します。

その1.Get-Member

さっきの$dir[0]に|(パイプ)をつけて「Get-Member」を実行します。

$dir[0]|Get-Member

「Get-Member」は「オブジェクトにどんなメソッドやプロパティ」があるか確認するコマンドレットです。
注目するのは「Property」と表示されている箇所。

実行結果

ここに表示されている名称が「プロパティ名」です。
(この画面だとAttributesやCreationTime等)

オブジェクトは、このプロパティ名の分だけ情報を持っています。
(メソッドは次回説明します)

その2.fl *

先に実行した「$dir[0]|fl *」画面に注目です。
左列がプロパティ名、:(コロン)を挟んで右列が格納された情報=値です。

オブジェクトがどんなプロパティを持っているか、どんな値を持っているか、大体この2つで確認できます

オブジェクトから、必要な情報=値を取得するには?

オブジェクトにプロパティ名を「.」(ドット)で繋げると「値」を確認できます。
例えば、「$dir」に「FullName」というプロパティを繋げてみます。

$dir.FullName
実行結果

「FullName」の値、「フォルダのフルパス」が表示されます。

もし、複数の情報を表示したい場合は「Select-Object」を使いましょう。
「Select-Object」は取得したいプロパティを選択できるコマンドレットです。

今度は「$dir」に|(パイプ)でSet-Objectを繋げて「FullName」と「LastWriteTime」をカンマ区切りで指定してみます。

$dir|Select-Object FullName,LastWriteTime
実行結果

フルパスとタイムスタンプが確認できます。

こんな感じで、プロパティ名が分かればオブジェクトから欲しい情報だけ取得できるようになります♪

最後に


ここまで読んでいただけた感想ですが

やぱり文字じゃん

って思われる人も多いだろうなーと、思ってみたりしています。
そうですねー、今回は「大体あっている」ところのお話なので。

そんなわけで、次回はもう少し詳しく「オブジェクト」を説明したいと思います。
最後までお付き合いいただき、ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?