派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【イベントレポート】初めてのPowerShell

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

5月29日に開催した「初めてのPowerShell」では、グローバルナレッジネットワーク株式会社の横山哲也さんをお迎えし、PowerShellについてお話しいただきました。そのイベントの様子をご紹介します。

■今回のイベントの見どころは

・PowerShellの「わかりやすさ」はエンジニアにとって特に重要
・PowerShellとはどんなものか、順を追って説明

前回の「今さら聞けない! Windows Server 2016 Active Directoryドメインサービス入門」でもご登壇いただいた横山さん、「この手の話は単調になりがちだけど、なるべくそうならないように話したい」と、コマンドの実例なども交えながらお話しくださいました。 ぜひ最後までご覧ください。


【講 師】グローバルナレッジネットワーク株式会社 横山哲也さん

▲【講 師】グローバルナレッジネットワーク株式会社 横山哲也さん
1994年より、ITプロ向けのWindows Server関連教育に携わる。2003年からマイクロソフトMVP。著書に『ひと目で分かるAzure基本から学ぶサーバー&ネットワーク構築』『プロが教えるWindows Server 2012システム管理』(監修・共著)『グループポリシー逆引きリファレンス厳選92』(監修・共著)

PowerShellがなぜ重要なのか

「なぜいまPowerShellが大事なのかという話から始めましょう。従来からあるコマンドは、どうしても分かりにくさ、覚えにくさがあるということで、その分かりにくさを解消するため、グラフィカルなシェルが登場したのは93年から94年頃でした。当時、Windows以外はコマンドベースでしたが、直感的に分かりにくいと言われており、そのためGUIのシェルが登場しました」(横山さん)

分かりやすいという長所を持つGUI。しかしGUIには、GUIならではの欠点もあります。シェル(GUI)とコマンド(CUI)、それぞれの長所、短所は以下のようになります。

●シェル(GUI)の短所
・削除ボタンや確認画面でうっかり「はい」をクリックしてしまい、誤って重要なファイルを消してしまうなど、意外と操作ミスが多い。
・繰り返し処理に向かない。
・対話処理しかできない。(詳細は後述)

●コマンド(CUI)の短所
・コマンドについての学習が必要。

●シェル(GUI)の長所
・直感的に分かりやすい。
・ウィザードに従えばいいので、事前に学習の必要がない。

●コマンド(CUI)の長所
・タイプミスなどでコマンドオプションを間違えたりしても、エラーで処理が止まることが多いので、致命的なミスが出にくい。
・コマンドを記述したファイルを作成しておけば、繰り返し処理が容易。

対話処理とバッチ処理

対話処理とバッチ処理の特徴は、以下のようになります。

●対話処理
・その場で操作して結果が返ってくる。

●バッチ処理
・まとめて処理できる。
・繰り返し実行できる。
・自動で実行できる。
・処理のために命令を記述したファイルを作成する必要がある。

GUIでは、処理は必ず「対話処理」になります。
一方コマンド(CUI)は、「対話処理」と「バッチ処理」の二種類の処理があります。
GUIの欠点は、「対話処理しかできない」ということです。

「ここを覚えておいてもらったうえで、PowerShellがどういうものか解説していきます」(横山さん)

イメージ

PowerShellの特徴とPowerShell登場までの流れ

「PowerShellは、シェルでありながらCUIであるコマンドが使える点が特徴です。対話処理だけでなくバッチ処理も可能で、条件判断などを含んだ制御構造が可能です。一貫した命令体系があり、オブジェクト処理が可能で、またVisual Studio やPowerShell ISEが開発環境としてあります」(横山さん)

例えばWindows Explorerは、バッチ処理ができないといった欠点があります。Windowsのコマンドプロンプトは対話処理であり、バッチ処理も可能ですが、制御構造は非常に貧弱で、命令体系もあまり統一されていません。
開発環境がほぼゼロなので、大きなプログラムはなかなか組めません。

こうした状況を問題視したマイクロソフト社は、Windows Script Hostを登場させました。言語はいくつかありますが、広く使われているのはVBScriptとJavaScriptです。これらは対話処理ができず、ファイルを作成してバッチ処理をしなくてはならないのが欠点です。

命令をその都度ファイルに保存しないと実行できないのは使いづらいということで登場したのが、Windows PowerShellです。Macintosh用、Linux用も公開されており、マイクロソフト社としてはこれを使ってすべてを管理するという方向に進んでいます。

イメージ

. NET Frameworkとの統合

Power Shellも含め、マイクロソフト社は、今後、新しいプログラムはすべて. NET Frameworkにする方向と、横山さんは解説します。

「PowerShellはCOMオブジェクトへのアクセスが可能で、従来のコマンドプロンプトが持っていたものはすべて使えます。例えば「Active Directory管理センター」も、中身はPowerShellです。ですから通常のプログラムも書ける、そういうものをマイクロソフト社は目指しています」(横山さん)

オブジェクト指向であることも、PowerShellの特徴です。実行結果はオブジェクトで出力されます。
またコマンド表現は、統一されています。そのため学習が容易です。

「さらにファイルとして保存できるので、スクリプト言語としても利用できますし、ファイルの再利用が可能です。スクリプト編集ツールもあり、デバッグ機能もあって、セキュリティも考慮されています。このように新たなものを取り込んで設計されたのが、PowerShellです」(横山さん)

イメージ

PowerShellの使い方

「ここから実際にPowerShellを使ってみましょう」ということで、実際の画面でのデモンストレーションを交えながら、機能やコマンドの説明が行われました。

PowerShellはWindows Vistaから標準搭載されています。Windows 10では、スタートメニューからPowerShellが起動できます。

イメージ

「これはMS-DOSのコマンドプロンプトと同じです。dirを実行するとファイル一覧が表示されます。従来のMS-DOSのコマンドプロンプトを使っていた人にも分かりやすくするため、このようになっています」(横山さん)

イメージ

コマンドレット操作では、以下のようなルールがあります。

 ・動詞-名詞の順に記述する。
 ・大文字小文字は区別されない。
 ・#以降の行はコメント扱いになる。
 ・1行が画面に収まり切らない場合には、’(バッククオート)を使って行が
  継続していることを示す。これはコードの可読性を向上させるためのもの。
 ・変数は$からはじめる。

「コマンドは全部覚えていなくても、一部を入力してTabキーを押すと、候補が補完されます。これもPowerShellの特徴のひとつです」(横山さん)とのことなので、初めてPowerShellのコマンドを使う人でも安心です。

統合開発環境 PowerShell ISE

「もうひとつのPowerShellである、PowerShell ISEについて紹介します。PowerShell ISEは、コードエディタと実行環境、デバッグ環境がひとつになった統合開発環境です」(横山さん)
こちらも実際の画面を起動しての紹介が行われました。

PowerShell ISEもスタートメニューから起動できます。
画面が三分割されていますが、上のウィンドウがエディタになっています。ここでプログラムを書きます。下のウィンドウが実行環境です。

イメージ

PowerShellの基礎文法について

「PowerShellの基本文法はそれほど難しくはないと思います。いちばん大切なのはオブジェクト、プロパティ、メソッドの概念です」と横山さん。

●オブジェクト
・PowerShellコマンドレットの実行結果。
・オブジェクトの種類に応じた型を持つ。

●プロパティ(データ)
・オブジェクトが保持する内部データへのアクセス窓口。
・「オブジェクト.プロパティ名」で指定する。

●メソッド(機能)
・オブジェクトが持つ機能
・「オブジェクト.メソッド名(引数1,引数2,…)」と指定する。

例えばファイルであれば、ファイルというオブジェクトは、ファイル名、ファイルの長さなど、いくつかのプロパティを持っています。
このプロパティを変更するには、なにか数値を代入すればいい場合もあれば、メソッドを通して変更する必要がある場合もあります。

例として、日付オブジェクトのプロパティとメソッドを取得してみます。

 1.現在日時のオブジェクトを取得
 $currentDate = Get-Date
 2.取得したオブジェクトのメンバを表示
 Get-Member -InputObject $currentDate
 3.Yearプロパティから年データを取得
 $currentDate.Year
 4.AddDaysメソッドで10日後の日付を計算
 $currentDate.AddDays(10)

イメージ

「コマンドレットについては、help <コマンドレット名>でヘルプファイルが見られるので、参考にしてください」(横山さん)

スクリプトの実行ポリシー

スクリプトの実行ポリシーについて、PowerShell ISEでは、不用意にスクリプトを実行できないようになっていると、横山さんは説明します。

「サーバではスクリプトの実行が禁止されており、ネットワーク越しにファイルを変更したりすることはできません。ただし、ローカルでは可能です」(横山さん)

サーバとクライアントでデフォルトは異なりますが、実行ポリシーの種類は以下の種類があります。

 ・Restricted(既定)
 ・AllSigned
 ・Remote Signed(おすすめ)
 ・Unrestricted
 ・Bypass

また、PowerShell ISEには、スコープという概念があります。
これはどの範囲でその処理を行うかを決めるものです。

 ・Process(今動いているプロセスだけ)
 ・CurrentUser(今動いているユーザーだけ)
 ・LocalMachine(規定:ローカル環境のみ)

ポリシーを変更したいときは、管理者としてSet-ExecutionPolicyを実行します。PC全体の設定が変更できます。

イメージ

最後に横山さんから、拡張モジュールについての説明がありました。
「今後、PowerShell ISEの拡張モジュールもどんどん出てきます。マイクロソフト社からも、Azure用の拡張モジュールなどが出ています。今後マイクロソフト社では、Windowsの機能はまずPowerShellに入れ、その後Windows GUIに実装するという流れをとっているので、ぜひPowerShellは覚えてください」

このあとの質疑応答では、オフラインでヘルプファイルが使えないかという質問や、Office365をPowerShellから操作できないかといった質問が出ていました。

Q:ヘルプファイルはオンラインで参照するという話があったが、オフライン時にも参照できるように、Linuxのリポジトリのようなことはできないか?
A:ネットワークがつながっていないとエラーになる。これを避ける方法はないので、ヘルプファイルが使えないときは、スマートフォンなどで検索しながら作業しているかたも多い。事前にupdate-helpコマンドレットを実行しておけば、ヘルプファイルをローカルに保存できる。

Q:PowerShellからOffice365を操作できるか?
A:メール等の機能について操作できるかどうかは、確実なことは今ここでは答えられないが、メールボックスの作成といった管理的なことはできるのではないかと思う。

【参考(Microsoft.comに移動)】
https://technet.microsoft.com/ja-jp/library/dn975125.aspx

イメージ

ITSTAFFINGでは定期的に、エンジニアの方のソフトスキル・ハードスキルを高めるイベントをご案内しています。イベント情報はエンジニアスタイル上で確認いただくことができます。

また、開催したイベントのイベントレポートは、順次、エンジニアスタイル、およびメールマガジンで公開されます。こちらもぜひご確認ください。