こんにちは。チェシャ男です。(-皿-)
いよいよ「PowerShell入門」本編です。 まずは PowerShell の概要についてザックリと知っていきましょう。
このページに足を踏み入れたあなたは、
・PowerShellをこれから使い始めようと思っている!
・何となく使ってみたがどのようにして使えばいいかわからない。
・1度使ったことはあるけれどよくわからずに挫折してしまった...
といった状況にあるのではないかと思います。
そんな入門者のあなたに PowerShell を好きになってもらうため、できるだけわかりやすく解説していこうと思います!
≡INDEX≡
入門の第一歩!PowerShell の概要を知ろう
PowerShell を最も簡潔に説明すると、
Microsoft が提供する、Windowsシステム管理用の「コマンドシェル」であり「スクリプト言語」
のことです。PowerShell(正式には、Windows PowerShell)は、Windows Server 2008 R2 / Windows 7 から標準で搭載されたWindows 管理用の CLI ツールなんです。
もし、あなたが多少 Windows を触ったことがあるならば、Windows 管理は「GUI(グラフィカル・ユーザ・インタフェース)」での操作や「コマンドプロンプト(cmd.exe)」を思い浮かべるかもしれません。
しかし PowerShell では、これらの管理方法に比べより「便利」に「強力」に「使いやすく」なっています!!
PowerShell はコマンドプロンプトと同じ CUI(コマンド・ライン・
いいですか?「コマンドレット」ですよ!「コマンド」と「コマンドレット」の違いがわかれば、あなたはもう立派な PowerSheller(パワーシェル使い)です!笑
あなたが「コマンド」と「コマンドレット」の違いを知らないまま PowerShell を使ってしまうと、こんなことになりかねません。
あなた:「○○のコマンドが、エラー吐いちゃって...。鈴木君助けて~」
鈴木君:「・・・。○○なんて「コマンド」は知らないからわかんないや。」
※鈴木君はPowerShellが大好き
しっかりと違いを抑えていれば、
あなた:「○○のコマンドレットが、エラーいちゃって...。鈴木君助けて~」
鈴木君:「○○かい?それはね○○実行に管理者権限が必要でね...あっそうだエラー文を見てご覧!ほらここn....」
※鈴木君は PowerShell が大好き
このテンションの上がった鈴木君のように、"レット"をつけることにこだわっている人もいます。非常に大事なのでしっかり覚えておきましょう。
∑(@_@) ハッッ!!
話を戻します。
PowerShell ではコマンドレットを組み合わせて「一連の処理」や「複雑な処理」をスクリプトとして記述し様々なスクリプトツールを作成することもできます。
PowerShell 誕生以前はバッチファイルや VB スクリプトなんかでツールを作成していたと思います。しかし、PowerShell でスクリプトを作成すると、より高度な処理を実現することができるんです。
チェシャ男が思う【PowerShell の5つの特徴】を簡単にあげると、
■ なんといっても標準装備!
■ 文法・用法が共通していてわかりやすい!
■ .NET Framework が使える!
■ 様々なデータへのアクセスが可能!
■ ゆとり仕様の開発環境!
といったものあります。それぞれについて簡単に説明していきます!
なんといっても標準装備!
冒頭でも述べた通り、PowerShell は Windows Server 2008 / Windows 7から標準装備されています。あなたが使う PC やサーバが、それ以降の新しい OS であれば元からインストールされていますので気軽に使うことができます。
「もっと古い OS 使っちゃってるよ」 ○rz
そんなあなたも安心してください。条件はありますが、インストールすることで古い OS でも一応使うことができますPowerShell のインストールや条件については次の記事で改めて解説します。さて、この標準装備の何が良いかお分かりでしょうか?
余計なソフトをインストールする必要がないんです!
さらに、どのマシンでも同じ動きをしてくれるんです!
これは非常に大切なことなんです。もしあなたがお仕事で何かのツールを使う場合、標準機能以外のツールやソフトウェアをサーバにインストールするとなれば、ツールの要件を確認したりきちんと作動するかテストしたりと負担がふえますよね?
どのマシンでも同じ動きをしてくれることを思い出してください。一度スクリプトツールを作ってしまえば、再利用ができるのでどんどん使いまわしが出来ちゃいます!
効率よく仕事がしたい人には、とっても心強い味方なんです。
文法・用法が共通していてわかりやすい
PowerShell のコマンドレットは、ある法則に従って作られています。
基本的には英単語で、
[動詞] - [名詞]
というパターンに従って名前付けされています。ですので、コマンドレットの動作が英単語の意味から簡単に推測できます。逆にこんな動作をさせたい!という場合にも英語から考えるとコマンドレットを推測することも出来ます。
例)
Copy-Item → アイテムをコピーするんだ!
アイテムを消したい! → Remove-Item
また、コマンドレットにはオプション(パラメータ)というものが用意されていてコマンドレットの動作を詳しく指定することが出来ます。このオプションも基本的に英語の意味に従って命名されています。オプションを使う場合には、"-(ハイフン)"に英単語を続けて使用します。
例)
-Path → ファイルやフォルダのパスを指定する
-Force → 動作を強制する
コマンドプロンプトの時はコマンドごとにオプションの指定方法が異なっていたり、アルファベット1文字で覚えづらかったりと大変な思いしませんでしたか?
その点、PowerShell では覚えなくても推測しやすいので結構便利なんです。
.NET Framework が使える
PowerShell は、.NET Framework を利用することが出来ます。というより、.Net Framework が動作の要件になっています。
(.NET Framework については改めて解説します)
PowerShell は「CLR」(共通言語ランタイム)という.NET Framework を実行するための仮想マシンのようなもので動作しているからなのです。
↓ピンっと来ないあなたに、.NET Framework との関係をざっくり噛み砕いて図説します。
従来のコマンド(コマンドプロンプト)下のように、マシンに対してコマンドで直接指示を出しているとします。

下のように .NET Framework を経由してマシンとやりとりをするのです。

このように、コマンドレットは .NET Framework のクラスを通してマシンに命令を出します。処理されたデータは再度 .NET Framework を通り、PowerShell 上にオブジェクトとして返却(戻り値)されます。
オブジェクトは様々なプロパティ値(ファイル名や日付情報など)を含んだインスタンスになっています。
……カタカナが多くてよくわかりませんね。
オブジェクトについてかなり噛み砕いて説明すると、色々な情報をまとめたデータのかたまりだと思ってください。つまり、コマンドレットを実行するといろんなデータがまとまって返ってくるということです。
また、戻り値をオブジェクトとして受け取れる PowerShell では、"|(パイプライン)”を使って再度 .NET Framework クラスとデータのやりとりを行うことが可能です。
この
オブジェクトのパイプライン渡し
が PowerShell ならではの大きな特徴です。例を挙げて説明します。従来のコマンドでは下図のように戻り値(出力結果)である文字列を次のコマンドに渡していたとします。
この時、複数のコマンドを通して結果を整形したいときは「特定の文字列を抽出」したり「変数に一旦代入」したりと余分な処理で手間が多くありませんでしたか?

比べて PowerShell では、コマンドレットからコマンドレットへオブジェクトとしてデータのかたまりをパイプラインで渡すことができます。

PowerShell の様に戻り値のデータを「かたまり」として扱うときは、必要な処理結果に応じて特定のデータ列を Select (選択)することが出来ます。文章だけではわかりづらいと思うので、下のコードを見てください。
コマンドプロンプトでの処理結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
c:\>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 2636-DBEB です 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 バイトの空き領域 |
PowerShell での処理結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |
あなたが、この結果からフォルダ名のみの一覧を取得するとしましょう。
(dir /a:d /b すればいいじゃん!というのは置いておいてください 笑)
コマンドプロンプトの場合は、
- フォルダ一覧の結果が出力されている部分(7~14行目)だけを FIND で抽出
- 変数に保存するか、ファイルに書き出す
- ループで一行ずつ呼び出し、更新日~<DIR>までを空白などに置換
- 空白を削除
PowerShell の場合は、
- Name プロパティを Select(名前列を選択)
少し顕著に書きすぎましたが、2つの間でこんなにも手間が違うんです。
なんとなく、PowerShell の良さが分かってもらえましたか?
様々なデータへのアクセス
この特徴は始めたばかりのころはよくわからないと思います。さらっと聞き流してもらっても大丈夫です。
PowerShell では、「ファイルシステム」「レジストリ」「デジタル署名」「環境変数」「エイリアス」「スクリプト変数」「関数」などなど様々なデータの種類に対してドライブ(PS ドライブ)としてアクセスすることが出来ます。
つまり、Cドライブのファイルにアクセスするような感覚で、レジストリのデータを見たり、環境変数を変更したりすることができるんです。もう一度言います。コマンドプロンプトでは扱うデータごとに操作方法が違っていたものが、
ファイルにアクセスする感覚
として一律に操作することができます。レジストリへの参照なんて簡単になったものです。
※これは逆に言えば、セキュリティホールにもなりやすいということなんですけどね。
サーバ管理を自動化したり、スクリプトを作成したりする段階になると、この特徴が非常に生きてきます。
ゆとり仕様の開発環境
PowerShell には、Windows PowerShell Integtrated Scripting Enviroment(通用:ISE)という統合開発環境が標準で装備されています。
この ISE 上ではコマンドレットの実行はもちろん、スクリプトによるツール開発・デバッグなどが可能です。しかも GUI 画面上で PowerShell の操作が出来ます。ISE を起動すると下のようなウィンドウが起動するはずです。

左上の白い部分がスクリプティングゾーンで左下の青部分がプロンプトです。作成したスクリプトを実行したりコマンドレットを実行したりすることができます。また、右部にはコマンドレットのヘルプが表示されており、これがとっても便利なんです。
拡大してみましょう。

この様に、コマンドレット使い方からオプションまでサポートしてくれます。右下のボタンからは実行や挿入まで代行してくれます。(至れり尽くせりですね)
便利すぎて、こればかり使っているとコマンドレットを全然覚えられません(笑)
また PowerShell ISE 専用の「psEdit」というコマンドレット(関数)が用意してあり、Linux の vi のようにファイルを編集することもできます。
まとめ
概要編はいかがでしたか?
ここまで読んでくれたあなたなら何となく PowerShell の事について理解できたと思います。
5つの特徴を是非覚えていってください。
■ なんといっても標準装備!
■ 文法・用法が共通していてわかりやすい!
■ .NET Framework が使える!
■ 様々なデータへのアクセスが可能!
■ ゆとり仕様の開発環境!
次回記事では、.NET Framework やインストール方法などについてもう少し詳しく解説します。
チェシャ男おススメ!PowerShell 入門者の必携本 (-皿-)
本記事をお読みくださったあなたに、チェシャ男が実際に PowerShell の勉強に使っているイチ押しの書籍を紹介します!
こちらの書籍ではリファレンス情報だけではなく、PowerShell の基礎知識や基本文法など約700ページにわたって解説しています!
初心者の場合、ネットでふらふらと情報を漁るよりは効率よく勉強ができると思いますよ!
本サイトでの Powershell 学習のお供に是非ご活用ください(*´皿`*)
疑問点等ございましたらお気軽にコメントください!