このページは、「PowerShell入門」基礎知識編Part.1です。
まずはPowerShellの概要についてザックリと知っていきましょう。入門者のあなたにPowerShellを好きになってもらうため、できるだけわかりやすく概要解説していきます!
- PowerShellをこれから使い始めようと思っている!
- 名前は聞いたことあるけど何ができるのか良く分かってない。
- コマンドプロンプトは使ってたけど乗り換えたい。
もくじ
PowerShellを最も簡潔に説明すると、
Microsoft が提供するWindowsシステム管理用の「コマンドシェル」でありオブジェクト指向の「スクリプト言語」
のことです。
今でこそOSS化しWindows環境以外でも動作させることができますが、PowerShellは「Windows Server 2008 R2 / Windows 7」から標準搭載されたWindows管理用のCLIツールだったのです。
多少知見がある方は、Windowsの管理といえばGUIでの操作やコマンドプロンプト(cmd.exe)を思い浮かべるかもしれません。PowerShellはコマンドプロンプトと同じCLIツールですが、これまでの管理方法に比べより「便利」で「強力」に「使いやすく」なっています!!
また、PowerShellではコマンドレットを組み合わせて「一連の処理」や「複雑な処理」を記述し様々なスクリプトツール(≒プログラム)を作成することができます。
PowerShell誕生以前のWindows環境では、バッチファイルやVBスクリプトでちょっとしたツールを作成していましたが、PowerShellでスクリプトを作成すると、より高度な処理を実現することができます。
PowerShellとコマンドプロンプトの違い
コマンドプロンプトはシステムに対しコマンドで命令するのに対し、PowerShell では「コマンドレット」と呼ばれる命令を使用します。
大事なのは「コマンドレット」の部分です。「コマンド」がCLIでコンピューターに命令するモノの総称とすれば、「コマンドレット」はPoweShellを介してコンピューターに命令するモノと覚えておけばよいでしょう。
正確なコマンドレットの違いについて、Microsoftのドキュメントを引用すると以下のように定義されています。
・コマンドレットは .NET クラスのインスタンスです。これらはスタンドアロンの実行可能ファイルではありません。
・コマンドレットは、数十のコード行から作成できます。
・コマンドレットは、通常、独自の解析、エラー表示、または出力書式設定を行いません。 解析、エラー表示、および出力の書式設定は、PowerShell ランタイムによって処理されます。
・コマンドレットは、テキストのストリームからではなく、パイプラインからの入力オブジェクトを処理します。また、コマンドレットは通常、オブジェクトをパイプラインに出力として配信します。
・コマンドレットは、一度に1つのオブジェクトを処理するため、レコード指向です。
コマンドレットの概要 – PowerShell | Microsoft Docs | © Microsoft
「コマンド」と「コマンドレット」の違いがわかれば、あなたはもう立派な PowerSheller(パワーシェル使い)の一員になれたことでしょう!
あなたが「コマンド」と「コマンドレット」の違いを知らないまま PowerShellを使ってしまうと、こんなことになりかねません。
とある日の昼下がり、、、
○○のコマンドが、エラー吐いちゃって…。鈴木君助けて~
ん・・・?
○○なんて「コマンド」は知らないからわかんないや。
※鈴木君はPowerShellが大好き
しっかりと違いを抑えていれば、
とある日の昼下がり、、、
○○のコマンドレットが、エラーいちゃって…。鈴木君助けて~
○○のエラーかい?
それはね○○実行に管理者権限が必要でね…あっそうだエラー文を見てご覧。ほらここn….
※鈴木君はPowerShellが大好き
このテンションの上がった鈴木君のように、“レット“をつけることにこだわっている人もいます。非常に大事なのでしっかり覚えておきましょう。
冗談はさておき、話を戻してPoweShellの特徴を見ていきましょう。
チェシャ男が考える【PowerShell の5つの特徴】を簡単にまとめます。
- なんといっても標準装備!
- 文法・用法が共通していてわかりやすい!
- .NETが使える!
- 様々なデータへのアクセスが可能!
- ゆとり仕様の開発環境!
それぞれについて、順番に説明していきます。
1.なんといっても標準装備!
冒頭でも述べた通り、PowerShellはWindows Server 2008 / Windows 7から標準機能として搭載されました。あなたが使っているような、それ以降の新しいOSのPCやサーバであれば最初からインストールされているので、すぐに使うことができます。
さて、この標準搭載の何が良いかお分かりでしょうか?
余計なソフトをインストールする必要がないんです!
さらに、どのマシンでも同じ動きをしてくれるんです!
これは非常に大切なことです。
インフラの現場ではよくありますが、標準機能以外のツールやソフトウェアをサーバにインストールする場合、ツールの要件を確認したりきちんと作動するかテストしたりする必要がり、コストや負担が増えてしまいます。
また、「どのマシンでも同じ動きをしてくれる」ということは、一度作ったスクリプトツールは、他のコンピューターで再利用ができます。
効率よく仕事がしたい人には、とっても心強い味方ですね。
2.文法・用法が共通していてわかりやすい
PowerShell のコマンドレットは、ある法則(命名規則)に従って作られています。
例)
Copy–Item = アイテムをコピーする
アイテムを消す = Remove–Item
このように、コマンドレットの動作が英単語の意味から簡単に推測できます。逆に「こんな動作をさせたい!」という場合にも、英語から考えるとコマンドレットを推測することが出来ます。
また、コマンドレットにはオプション(パラメータ)というものが用意されていてコ、マンドレットの動作を詳しく指定することが出来ます。基本的にオプションも英語の意味に従って命名されています。
例)
–Path → ファイルやフォルダのパスを指定する
–Force → 動作を強制する
コマンドプロンプトの時はコマンドごとにオプションの指定方法が異なっていたり、アルファベット1文字で覚えづらかったりと大変な思いしませんでしたか?
その点、PowerShellでは覚えなくても推測しやすいので非常に使いやすいです。
3..NETが使える
PowerShellは.NETが動作要件になっており、「CLR」(共通言語ランタイム)という.NETを実行するための仮想マシンのような仕組みの上で動作しています。
「CLRの上で動く」ということについてざっくり噛み砕いて図説します。
従来のコマンド(コマンドプロンプト)では、マシンに対してコマンドで直接指示を出しているとします。
対してPoweShellのコマンドレットでは.NETを経由してマシンとやりとりをするのです。
コンピューターで処理された結果は再度.NET通り、PowerShell上にオブジェクトとして返却(戻り値)されます。オブジェクトは様々なプロパティ値(ファイル名や日付情報など)を含んだインスタンスになっています。
このオブジェクトは.NETの処理で生成されたインスタンスのことで、プロパティと呼ばれる属性とメソッドと呼ばれる機能を持っています。
かなり噛み砕いて説明すると、色々な情報をまとめたデータのかたまりだと思ってください。コマンドレットを実行すた際の戻り値は単なる文字列ではなくて、いろんなデータがまとまって返ってくるということです。
また、戻り値をオブジェクトとして受け取れるPowerShellでは、”|(パイプライン)”を使って次のコマンドレットに処理を渡すことで、再度.NETクラスとデータのやりとりを行うことが可能です。
この「オブジェクトのパイプライン渡し」がPowerShellの大きな特徴で、他のシェル言語との大きな違いでもあります。
コマンドレットA | コマンドレットB
例)
Get-Process | Sort-Object
オブジェクトをパイプラインで渡すという概念を説明します。
従来のコマンドでパイプを使用する場合は、戻り値(出力結果)である文字列を次のコマンドに渡しています。
このように複数のコマンドを通して結果を整形したいときは、特定の文字列を抽出したり変数に一旦代入したりと力業なテクニックが必要でした。
比べてPowerShellでは、コマンドレットからコマンドレットへオブジェクトとしてデータのかたまりをパイプラインで渡すことができます。
PowerShellの様に戻り値のデータを「かたまり」として扱うことができれば、処理結果に対し必要に応じて特定のデータ列をSelect (選択)することで抽出できます。
文章だけではわかりづらいと思うので、実際の出力で考えてみましょう。下のような出力結果から「フォルダ名のみの一覧」を取得するとします。
c:\>dir c:\ のディレクトリ 2011/01/21 19:41 <DIR> Intel 2009/07/14 11:37 <DIR> PerfLogs 2016/09/15 21:01 <DIR> Program Files 2016/09/22 02:56 <DIR> share 2011/04/26 22:35 <DIR> temp 2011/04/06 16:05 <DIR> Users 2011/04/06 16:11 <DIR> util 2016/06/27 01:17 <DIR> Windows 0 個のファイル 0 バイト 9 個のディレクトリ 280,406,130,688 バイトの空き領域
ここからフォルダ名一覧を抽出しようとすると、
- フォルダ一覧の結果が出力されている部分(7~14行目)だけを FIND で抽出
- 変数に保存するか、ファイルに書き出す
- ループで一行ずつ呼び出し、更新日~<DIR>までを空白などに置換
- 空白を削除
PS C:\> Get-ChildItem ディレクトリ: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2011/01/21 19:41 Intel d---- 2009/07/14 11:37 PerfLogs da--- 2016/09/15 21:01 Program Files d---- 2016/09/22 2:56 share d---- 2011/04/26 22:35 temp da--- 2011/04/06 16:05 Users da--- 2011/04/06 16:11 util da--- 2016/06/27 1:17 Windows
ここからフォルダ名一覧を抽出しようとすると、
- Name プロパティを Select(名前列を選択)
少し顕著に書きすぎましたが、2つの間でこんなにも手間が違うんです。
なんとなくでも、PowerShellは便利そうだと思ってもらえましたか?
4.様々なデータへのアクセス
この特徴は、始めたばかりの頃だとあまり恩恵を受けられないかもしれませんが、管理・運用にPowerShellを使いだすと非常に有用です。
PowerShellでは、「ファイルシステム」「レジストリ」「デジタル署名」「環境変数」「エイリアス」「スクリプト変数」「関数」など様々なデータの種類に対して、ドライブ(PSドライブ)としてアクセスすることが出来ます。
つまり、コマンドプロンプトで操作するときの
ファイルにアクセスする感覚
で、レジストリのデータを見たり環境変数を変更したりすることができるんです。コマンドプロンプトでは扱うデータごとに操作方法が違っていたものが、一律の操作方法で統一することができます。
サーバ管理を自動化したりスクリプトを作成したりする段階になると、この特徴が非常に生きてきます。
5.ゆとり仕様の開発環境
WidowsのPowerShellには、Windows PowerShell Integtrated Scripting Enviroment(通用:ISE)という統合開発環境が標準で同梱されています。
左上の白い部分がスクリプティングゾーン、左下の青部分がプロンプトで、ISEではコマンドレットの実行はもちろん、スクリプト形式のツール開発・デバッグなどが可能です。
また、右部には非常に便利なコマンドレットのヘルプが表示されています。
拡大してみると、
この様に、コマンドレットが使用可能なオプションを表示してくれますし、右下のボタンからは[Run(実行)]や[Insert(挿入)]まで代行してくれます。
便利すぎて、こればかり使っているとコマンドレットを覚えられません(笑)
「PowerShell入門」基礎知識編Part.1はいかがでしたか?
ここまで読んでくれたあなたなら、PowerShellの概要・特徴について理解できたと思います。
最後に、もう一度まとめるとPoweShellとは
Microsoft が提供するWindowsシステム管理用の「コマンドシェル」であり「スクリプト言語」
であり、次の5つの特徴があります。
- なんといっても標準装備!
- 文法・用法が共通していてわかりやすい!
- .NETが使える!
- 様々なデータへのアクセスが可能!
- ゆとり仕様の開発環境!
疑問点等があれば、お気軽にコメント・お問い合わせください!
次の「PowerShell入門」基礎知識編Part.2では、PowerShellを使用する際の要件やバージョンについて学んでいきます。
[Part.2]インストール可能なPowerShellのバージョンと要件を確認!
Powershell使いたいけど、なに?っていう初心者なのでとてもわかりやすくてよかったです。
特徴の .NET Frameworkが使えると言うのは、ファイル等の戻り値がオブジェクトとして返ってくるので、オブジェクトのプロパティを指定してやれば欲しい値に簡単に取ってこれるから便利という認識であってますか?
また、様々なデータにアクセス出来るのところにレジストリとありますが、これは何ですか?調べてみましたがイマイチイメージが掴めません。説明かわかりやすく説明しているサイトを教えていただけだら嬉しいです。よろしくお願いします。
>>三月ウサギ様
コメントありがとうございます。不思議な国のお仲間ですね(^^♪
そうですね!
オブジェクトとして操作できることによりファイルオブジェクトであれば更新日や拡張子などなど属性をプロパティとして取得することができます。操作用のメソッドも用意されているので移動や削除といった操作も可能です。
レジストリというのはWindowsのOSが使用するシステムの設定情報やユーザー別の設定情報が格納されている内部のDBのようなものです。
分かりやすいのでいえば、使用中のプリンタ情報や設定している壁紙情報、接続したことがあるネットワークなど普段何気なくコントロールパネルやシステム設定で見るような情報が入っています。
PowerShellではレジストリの情報を確認したり変更したりすることができるので、スクリプトで壁紙を変えるといったこともできるはずです!
分かりにくい,イントロが長過ぎる
コマンドレット等々が何かを説明するより,身近に必要と感じる簡単な例から説明してほしい.
私の場合,指定フォルダーの中のファイルの大きい順 を知りたい,何かgciみたいなもの使うようだが指定パスが不正で受け付けられない.
初心者を対象にしているので、丁寧で分かりやすかったと思います。
普段はくだらない揚げ足取りばかりなのにPC業務になると新人に教えてもらってやってもらうのを当然だと思っていた元同僚を思い出すなあ。
分かりやすかったです。
ありがとうございます(*´▽`*)
折を見て情報はアップデートさせて頂きますm(__)m
[…] PowerShell – Windows7〜搭載している強力なスクリプト環境。シェルスクリプト書ける人向け。 […]