[運用]
|
|
本連載では、Windowsの次世代シェルであるWindows PowerShell(以下PowerShell)の基本的な機能を理解していただくことを目的としている。前編では、まずPowerShellの基本的な概念を理解していただくという意味で、より手軽に扱える対話型シェルを中心に解説を進めた。しかし、PowerShellの最終的な目標はスクリプティング技術によるシステム運用の自動化である。後編の今回は、前回の内容を踏まえて、PowerShell上でスクリプトを利用するための基礎について解説していく。
具体的には、最初にスクリプトを実行するための基本的な手順を理解したうえで、PowerShellにおける変数や制御構文、関数など基礎的な構文の解説を行っていく。
PowerShellスクリプトの基本
スクリプトとはいっても、その実体はファイルとして保存されたコマンドの集合にすぎない。例えば前回も紹介した次のコードをスクリプト化するには、ただ単にこれをテキスト・エディタで入力し、ファイルとして保存すればよい。
|
|
| Get-ChildItemコマンドレットの処理結果をリスト形式に整形する(Begin.ps1) |
ここでは、スクリプトのファイル名を「Begin.ps1」としておこう。ファイルのベース名には任意の名前を指定できるが、PowerShellスクリプトの拡張子は「.ps1」としなければならない。
ただし拡張子を「.ps1」としたスクリプト・ファイルをエクスプローラなどからダブルクリックしてもPowerShellが自動起動するわけでは「ない」点には注意が必要である(試してみれば分かるように、「.ps1」ファイルはデフォルトでメモ帳によって開かれる)。
従来多くのスクリプティング実行環境では、スクリプト・ファイルをダブルクリックすれば自動的にコードを実行できたため、PowerShellのこの仕様は一見、不便であるように思われるかもしれない。しかし従来のこのような挙動は、往々にしてセキュリティ上の問題となることが多かった。つまりスパム・メールなどに添付されてきたスクリプト・ファイルをエンドユーザーがダブルクリックしてしまった場合、そのまま任意のコードが実行されてしまう可能性があった。しかしPowerShellではユーザーが「.ps1」ファイルをダブルクリックしても単にメモ帳が開くだけである。これにより、PowerShellから明示的にスクリプト・ファイルを呼び出さない限り、こうした悪意あるスクリプトが意図せずに実行される可能性を最小限に抑えることができる。
スクリプト・ファイルの実行方法
ではPowerShellスクリプトを実際に実行してみよう。繰り返しになるが、PowerShellでは「.ps1」ファイルのダブルクリックではスクリプトを起動することができないので、PowerShell上から明示的に呼び出す必要がある。ただしこの場合にも、従来のコマンド・プロンプトに慣れている方にとってはいくつか注意しなければならない点がある。
実行に関する注意1―PowerShellはカレント・フォルダを検索しない
例えば先ほど作成した「Begin.ps1」をカレント・フォルダ(ここでは「C:\Windows\Temp」)に配置しているものと仮定する。その場合、従来のコマンド・プロンプトであれば、単にファイル名を指定するだけでスクリプト・ファイルが呼び出され、実行されるはずだ。これは、コマンド・プロンプトがコマンド・パスの検索先として、デフォルトでカレント・フォルダを含めているためだ。しかしPowerShellの場合はどうだろう。
PS > Begin.ps1 |
このように、エラーとなり、ファイル名が認識されていないことが確認できる。結論からいってしまうと、PowerShellではスクリプト・ファイルを実行する場合に必ず絶対パスか相対パス形式でファイルを指定しなければならない。つまり上の例であれば、
PS > ./Begin.ps1 |
または、
PS > C:\Windows\Temp\Begin.ps1 |
のように指定する必要がある(拡張子「.ps1」は省略しても構わない)。
実行に関する注意2―スクリプト実行ポリシーを設定すること
もっとも、これだけではまだ「.ps1」ファイルを実行することはできない。絶対パス/相対パスを指定して再び実行してみると、先ほどとはまた異なるエラーメッセージに遭遇することになるはずだ。具体的なメッセージは以下のとおりである。
スクリプトの実行がシステムで無効になっているため、ファイル C:\...\Begin.ps1 を読み込めません。詳細については、「get-Help about_signing」と入力してヘルプを参照してください。 |
PowerShellではセキュリティ上の理由から、デフォルトでスクリプトの実行が無効に設定されている。そのため、スクリプト・ファイルを実行するためには、あらかじめPowerShellのスクリプト実行ポリシーを変更しておく必要がある。実行ポリシーを変更するにはSet-ExecutionPolicyコマンドレットを利用する。
PS > Set-ExecutionPolicy RemoteSigned |
Set-ExecutionPolicyコマンドレットを実行してから再びスクリプト・ファイルを実行してみると、今度は確かにスクリプト・ファイルが呼び出され、正しく実行されることが確認できるはずだ。
|
|
| スクリプト・ファイルを正常に呼び出すことができた例 |
Set-ExecutionPolicyコマンドレットで指定可能な実行ポリシーには以下のようなものがある。
| 実行ポリシー | 概要 |
| Restricted | すべてのスクリプトを実行不可 |
| AllSigned | すべてのスクリプトに証明書を要求 |
| RemoteSigned | インターネット経由でダウンロードしたスクリプトのみ証明書を要求 |
| Unrestricted | すべてのスクリプト実行を許可(ただしインターネット経由でダウンロードしたコードは実行確認のみあり) |
![]() |
|
| PowerShellで利用可能な実行ポリシー | |
通常、スクリプトを開発/実行する環境においては、実行ポリシーとして「RemoteSigned」を選択しておくことをお勧めする。「AllSigned」がより安全ではあるが、すべてのスクリプトに証明書が必要となるため、特に自分でスクリプトを開発するような局面では適切とはいえない。「Unrestricted」は名前のとおり、一切の制約を課さない実行ポリシーであり、すべてのスクリプトを無条件に実行することができる。通常、特別な理由がない限りはUnrestrictedの利用は避けるべきだ。
以上、PowerShellにおけるスクリプトの実行方法を理解したところで、ここからはPowerShellにおける基本的な構文について紹介していく。
| INDEX | ||
| [運用]Windows PowerShellコマンド&スクリプティング入門(前編) | ||
| PowerShellの基本 | ||
| 1.PowerShellを始めよう | ||
| 2.PowerShellをインストールする | ||
| 3.キーワード1「コマンドレット」―PowerShellを操作する基本コマンド | ||
| 4.キーワード2「.NETオブジェクト」―コマンドレットの戻り値はオブジェクト | ||
| 5.キーワード3「ドライブ」―データソースへのアクセスを一元化する | ||
| [運用]Windows PowerShellコマンド&スクリプティング入門(後編) | ||
| PowerShellスクリプティングの第一歩 | ||
| 1.PowerShellスクリプトの基本 | ||
| 2.PowerShellの変数 | ||
| 3.PowerShellの制御構文 | ||
| 4.PowerShellの関数 | ||
| 5..NET Frameworkのクラスを利用する | ||
| Windows運用 |
TechTargetジャパン
- クライアントでも利用可能になるHyper-V 3.0とは? (2012/2/9)
Windows 8では、従来のWindows Virtual PCに代わって新しくHyper-V 3.0がクライアント向けにも導入される。その概要を解説 - 第303話 ペアプロ2 (2012/2/7)
あっ、またまたいつぞやの幽霊が! …っと思ったら、何だ倉井さんかぁ…。はぁー、驚いた… - Excelで郵便番号変換ウィザードを活用する (2012/2/3)
Excelで管理している顧客名簿などで、不足している郵便番号や住所を入力するのは意外と面倒。郵便番号変換ウィザードを使えば、これらの入力が簡単になる - PCをシンクライアント化するWindows Thin PCとは? (2012/2/2)
VDI向けにシンクライアントがほしいけど専用機を買う余裕はない… Windows Thin PCなら既存PCを低コストでシンクライアント化できる。まずは概要を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

