PowerShellスクリプトの作成と実行

Windows PowerShellとは

PowerShellとは、「.NET Framework 2.0」を利用するWindowsのシステム管理用シェルです。

コンソール上で対話的にコマンドを実行することや、スクリプトファイルを記述してバッチ処理を実行することも可能です。


コマンドレット(cmdlet:commandlet)とは

コマンドレットとは、Windows PowerShellに用意されているコマンドのことです。

PowerShellではコマンドレットを単独またはパイプラインで連結して使用します。


コマンドレットは「動詞-名詞 -パラメータ名 パラメータ値」という命名規則となっています。

利用可能なコマンドレットを一覧表示するには、PowerShellから「Get-Command」を実行します。


PS C:\temp> Get-Command

Windows PowerShellスクリプトの作成

ファイル拡張子

PowerShellスクリプトの拡張子は「.ps1」となります。

ps1の「1」とは、バージョン (PowerShell V1) を意図したものであり、当初はバージョン毎に拡張子を挙げていく予定であったらしいです。ただし、PowerShell V2でも「ps2」ではなく「ps1」のままであり、今後変更される予定もなさそうです。


PowerShellでHello Worldプログラムを作成する

「helloworld.ps1」ファイルを作成して、下記を記述します。


# helloworld in PowerShell
Write-Host "Hello world"

コメントについて

PowerShellスクリプトにおけるコメント表記は下記2通りの方法となります。


# 一行単位のコメントです。

<#
  複数行で記述する
  コメント表記です。
#>

大文字と小文字について

PowerShellでは文法上、大文字小文字を区別しません。

「Write-Host」と「write-host」は同じコマンドレットと判断されます。


複数行の記述

コマンドが長すぎて複数行に渡る場合は、行の終了で「バッククォート(`)」を記述することで、複数行に記述することが可能です。


Write-Host("USAGE: " + $MyInvocation.MyCommand.Name + `
           " arg1 arg2")

一行にまとめて記述する場合には「;」を用います。


Write-Host("hello"); Write-Output("world")

Windows PowerShellスクリプトの実行

実行ポリシーについて

初めてPowerShellを実行する環境において、PowerShellスクリプトを実行しようとすると、以下のエラーが表示されます。


スクリプトの実行がシステムで無効になっているため、ファイル C:\temp\helloworld.ps1 を読み込めません。
詳細については、「get-help about_signing」と入力してヘルプを参照してください。
発生場所 行:1 文字:19
+ c:\temp\helloworld.ps1 <<<<

これは、PowerShellの実行ポリシーが「Restricted(スクリプト実行を不許可)」であるため、PowerShellスクリプトを実行できないことを意味します。

「管理者権限でPowerShellを起動」して、以下のコマンドを実行することでポリシーを変更する必要があります。


PS C:\temp> Set-ExecutionPolicy RemoteSigned

実行ポリシーは以下の通りです。

Restricted すべてのスクリプトが実行禁止。PowerShellインストール直後のデフォルト設定
AllSigned 署名されているスクリプトのみが実行可能。署名されていないスクリプトは実行禁止
RemoteSigned ローカルに保存されているスクリプトは実行可能。非ローカルのスクリプト(インターネットからダウンロードしたもの)は、署名されているもののみが実行可能
Unrestricted すべてのスクリプトが実行可能。ただし非ローカルのスクリプトは、実行確認があり、ユーザによる明示的な許可がある場合のみ実行可能

スクリプトの実行

OS上からマウスで、PowerShellスクリプトを記述した「.ps1」ファイルをダブルクリックしてもスクリプトを起動することができません。

PowerShellターミナル上からスクリプトファイルパスを明示して呼び出す必要があります。


PS C:\temp> .\helloworld.ps1

なお、拡張子「.ps1」は省略することができます。


コマンドプロンプトからPowerShellスクリプトを実行する。

コマンドプロンプトからスクリプトファイルをオプション指定したPowerShell.exeを呼び出すことで処理を実行します。


c:\temp>powershell .\helloworld.ps1

スクリプトが環境変数PATHで指定したディレクトリ(フォルダ)に保存してあれば、スクリプトをパス付きで記述する必要はありません。


PowerShell 2.0からは「-file」オプションでスクリプトファイルを指定することが可能です。


c:\temp>powershell -file helloworld.ps1


関連ページ