適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話やポイ活など気になったことも載せているブログです。

【PowerShell入門】コマンドレットとは?

PowerShellの入門編。今回はPowerShellで命令を出すときに使う、コマンドレットについて解説します。

コマンドレットとは?

コマンドレットとは、PowerShellで使われる命令、コマンドのことです。

コマンドレットを実行することでPowerShellが処理をしてくれます。

その処理結果に応じて、画面に結果が表示されます。

ざっくりしたイメージ

f:id:shinmai_papa:20210810223048p:plain

実際に実行してみた画面 f:id:shinmai_papa:20210810223054p:plain

この例では、Get-ChildItemと入力して、エンターを押しました。

すると、Cドライブの直下にあるフォルダやファイルの一覧が表示されました。

このようにコマンドレットを使うとPowerShellに命令を出すことができるのです。

コマンドレットは「動詞 + 名詞」でできている

例えば、フォルダ内のファイルや子フォルダの情報を教えてくれるコマンドレットは、

Get-ChildItem

というコマンドレットです。

また、現在動いている処理(プロセス)を教えてくれるコマンドレットは

Get-Process

というコマンドレットです。

見てもらうとわかりますが、コマンドレットは「動詞 - 名詞」 の組み合わせです。

動詞 名詞
Get(得る) ChildItem(子のアイテム)
Get(得る) Process(プロセス)

動詞と名詞の組み合わせのおかげで、コマンドレットの動作がある推測しやすくなっています。

そのため、実現したい操作の動詞と、操作したいものの名詞を組み合わせて調べてみると、それっぽいコマンドレットが簡単に見つかることがあります。

よく使われる動詞にはGet(取得)、Set(設定)、Stop(停止)、Invoke(実行)、New(新しく作る)、Test(調べる)といったものがあります。

よく使われる名詞にはItem(ファイルやディレクトリなど)、String(文字)、Path(ファイルなどのパス)。Printer(印刷装置)、Location(ディレクトリ)、Process(処理)といったものがあります。

コマンドレットの種類について知りたいときはGet-Commandコマンドレットを使う

例えば(Path)という言葉を含むコマンドレットの一覧を取得したいときは次のようにします。

Get-Command *Path*

Get-Commandの後にあるPathはパラメータです。

この後説明していきます。

ちなみに*(アスタリスク)はワイルドカードといって曖昧検索に使います。

Get-Commandだけを実行することもできます。

そうするとそのPowerShellで使えるコマンドレットの一覧を取得することができます。

たくさんのコマンドレットが表示される。

f:id:shinmai_papa:20210810223101p:plain

パラメータ(引数)が必要なコマンドレットもある

コマンドレットを調理方法に例えたとしたら、その調理で使用する食材、それがパラメータです。

例えば天ぷらについて考えてみます。

エビに衣をつけて揚げればエビの天ぷらができます。

サツマイモに衣をつけて揚げればサツマイモの天ぷらができます。

「衣をつけて揚げる」という調理方法は同じですが、何に衣をつけるかで完成する料理は変わってきますよね。

コマンドレットも同じで、同じ調理方法でいろいろな食材を調理することができるのです。

(例え下手だな!)

実際のコマンドレットの例として、新しいテキストファイルを作成するコマンドレットは次の通りです。

New-Item C:\test.txt

上述のNew-Itemはパラメタとして作成したいファイルへのパスを指定しています。

これがもし、パラメータを指定できず、test.txtというファイルを作成したい場合は、このコマンドレット、別のファイル名で作成したい場合は別のコマンドレット・・・というのはとても非効率になってしまいます。

パラメータがあるおかげでコマンドレットに柔軟に処理してもらうことができます。

また、パラメータは一つとは限りません。

複数指定することもできます。その場合はスペースで区切って指定するか、パラメータの名前を指定します。

各パラメータには名前があります。

「コマンドレットハイフン+名前 パメラメータ」が正式な書き方です。

上述のNew-Itemの例の正式な書き方は下記の通りです。

New-Item -Path C:\test.txt

パラメータには必須のパラメータとオプションのパラメータがあります。

必須のパラメータの場合は名前を省略することができます。

前出のNew-Item C:\test.txtは、New-ItemのPathパラメータが必須のため、このように書くことができました。

ちなみに必須パラメータを指定せずに実行すると、パラメータを入力するよう促されます。

f:id:shinmai_papa:20210810223107p:plain

パラメータはコマンドレットによって違うため、ひとつひとつ覚えておけるものではなありません。

自分がよく使うコマンドレットのパラメータだけ覚えておけば十分で、それ以外は使う都度調べればいいと思います。

Alias(別名)を使うことができる

WindowsのコマンドプロンプトやUnixのコマンドに親しみのある人はPowerShellの中でもその知識を生かすことができます。

PowerShellのコマンドレットにはAlias(別名)が定義されているものがあり、そのAliasは(linux使いの人とかには)よく知られたものとなっています。

例えば、コマンドプロンプトのdirコマンドやUnixのlsコマンドはフォルダ内の要素の一覧を取得することができるコマンドですが、PowerShellでも同じように使うことができます。

それは、ほぼ同等の機能を持ったコマンドレットであるGet-ChildItemコマンドレットのAlias(別名)としてdirやlsが定義されているためです。

Aliasの定義の一覧はGet-Aliasコマンドレットで確認することができます。

また、Set-Aliasコマンドレットを使うことで自分でAliasを定義することもできます。

例えば、Get-CommandコマンドレットのAliasとしてgcmdを定義する場合はこのようにします。

Set-Alias -Name gcmd -Value Get-Command

多くは処理の結果が返ってくる

フォルダの一覧を取得したり、コマンドレットの一覧を取得するコマンドレットを実行すると、画面上にその結果が表示されていることがここまでで確認できました。

表示されているのは、処理された結果です。

最初はイメージが沸きにくいかも知れませんが、「返ってくる」というのは、私達がコマンドレットでPowerShellに処理をお願いして、その結果が私たちの方に戻ってくるという意味です。

パラメータのところでコマンドレットを調理法に例えましたが、処理の結果は、コマンドレットによって調理され、完成した料理のようなものです。

調理をしたらその結果として料理が完成します。

完成された料理が結果として画面に表示されているとも言えます。

コマンドレットの処理結果はオブジェクト

では、その返ってきた結果とは具体的になんなのでしょうか。

料理にも、ごはんものや麺類、肉料理など色々な種類があるように、処理結果にも名前や処理結果の一覧、その数などの情報を持っています。

これらの情報のことをプログラミングの世界ではプロパティ(属性)と呼びます。

画面に表示されているものは、返ってきた結果のプロパティを見やすくしたものです。

話が遠回りしていますが、処理の結果画面に表示されているのはあくまで属性だけです。

属性(プロパティ)があるということは、プロパティを持った本体である料理があるはずです。

その本体がオブジェクトと呼ばれるものになります。

つまりPowerShellのコマンドレットの処理の結果とは、オブジェクトのことです。

で、オブジェクトって何よ?

話が大分抽象的になってしまいました。

ここではオブジェクトについて簡単に説明します。

オブジェジェクトは「型、プロパティ、メソッドを持つ概念」

オブジェクトとは「型、プロパティ、メソッドを持つ概念」であると思ってください。

型=そのオブジェクトの分類。文字ならString、数値ならintなど。人で言うと、ホモ・サピエンス・サピエンス(だと思う)

プロパティ=そのオブジェクトが持つ情報。人で言うと、身長や体重、名前、特技など。

メソッド=そのオブジェクトができること。人で言うと、プログラミングができる人はプログラミングメソッドが使える。足が速い人は速く走るメソッドが使える。

これらの3つを持ったものがオブジェクトです。

オブジェクトは目に見えるものではありません。

そのためオブジェクト自身を表示することはできません。

プロパティがあることで、オブジェクトは形作られていきます。

目に見えるのはプロパティです。

オブジェクトの概略を知りたいときはToString()というメソッドを呼び出します。

ToStringメソッドは一般的にはそのオブジェクトを分かりやすく一言で表してくれるメソッドと理解してくださればいいかと思います。

代表的なコマンドレット

Get-ChildItem

ファイルやフォルダの一覧を取得します。

#Cドライブ直下のフォルダ、ファイルの一覧を取得する
Get-ChildItem -Path 'C:'

#C:\Users\user\Documentsフォルダに含まれる全てのファイルとフォルダの一覧を取得する。
Get-ChildItem -Path 'C:\Users\user\Documents\' -Recurse

Get-Content

ファイルの中身を取得できます。

#userというユーザーのデスクトップにあるaaa.txtというファイルの中身を取得する
Get-Content -Path C:\users\user\Desktop\aaaa.txt

Get-Command

コマンドレットを取得できます。

#そのPowerShellで現在使えるコマンドレットの一覧を取得する
Get-Command
#Get-で始まるコマンドレットの一覧を取得する
Get-Command 'Get-*'

New-Item

新しいファイルやフォルダなどを作ります。

#Cドライブにtest.txtというファイルを作成する
New-Item -Path 'C:\test.txt'
#Cドライブにfolderというフォルダを作成する
New-Item -Path 'C:\folder'-ItemType Directory

その他にも普段使いのユーザーからシステム管理者といったヘビーユーザー(?)向けのコマンドレットまで幅広いコマンドレットが用意されています。

ぜひGet-Commandコマンドレットなどで調べてみてください。

終わりに

PowerShellのコマンドレットについて解説してみましたが、抽象的な話もかなり多かったですね。

これについては習うより慣れろの部分が多きいと思います。

どんなコマンドレットがあるかわかったら、後はとにかく使ってみる!!

これに尽きます。(身も蓋もない・・・)

ことあるごとに自分のやりたい操作をググったり、Get-Commandなどを使ってコマンドレットを調べてみる。

そうして少しずつ引き出しを増やしていく・・・

月並みな結びですが、繰り返しが大事ということで。

というわけで、ここまでお読みいただき、ありがとうございました。

PowerShellの入門記事(ちょっとずつ更新予定)

【PowerShell入門】PowerShellとは?【起動からコマンドの実行までを解説】 - 適材適所

【PowerShell入門】PowerShellの演算子とは? ←comming soon・・・

【PowerShell入門】ファイルを操作する

【PowerShell入門】フォルダを操作する

【PowerShell入門】条件分岐

【PowerShell入門】繰り返し処理

【PowerShell入門】パイプラインって?

・・・以下続刊予定