[PowerShell Core 入門] スクリプトファイルの作成と実行方法

PowerShell Core PowerShell Core
PowerShell Core

PowerShell Core は、コマンドラインインターフェースからコマンドを入力して実行するだけのものではありません。何度も実行するような処理は、スクリプトファイルにして再利用することができます。

そこで、今回はスクリプトファイルの作成方法と実行する方法について説明をします。

スクリプトの直接入力

「PowerShell」は、環境のみならず、スクリプト言語の名称でもあります。

他のプログラミング言語と同様に、変数や制御構文を使用してプログラミングを行うことができます。

また、条件分岐や繰り返しといった制御構文は、コマンドラインインターフェースに直接入力して利用することもできます。

スクリプトファイルを作成する前に、コマンドラインインターフェースに直接スクリプトを入力する方法について説明をします。

if 文

コマンドラインインターフェースでスクリプトを入力する前に、if 文について簡単に説明をします。

if 文は条件によって処理を分岐させるためのもので、書式は以下の通りです。

if (条件式1) {
  条件式1が満たされた場合に実行する処理
} elseif (条件式2) {
  条件式2が満たされた場合に実行する処理
} else {
  全ての条件式が満たされない場合に実行する処理
}

スクリプトの入力

それでは、スクリプトを入力してみましょう。

ここでは、Test-Path というコマンドレットを使用して、指定したパスが存在するかどうかをチェックし、存在する場合は「あるよ」、存在しない場合は「ないよ」を表示させるスクリプトを作成します。

ちなみに Test-Path コマンドレットは「Test-Path “存在をチェックするパス”」のようにして使用します。指定したパスが存在する場合は True を返します。

PowerShell Core を起動したら、以下のように入力をします。Write-Host は文字列を表示するコマンドレットです。

PS > if (Test-Path "C:\Work\Temp") {
>> Write-Host "あるよ"
>> } else {
>> Write-Host "ないよ"
>> }

1行入力して改行をすると、先頭に「>>」が表示されます。これは、行が継続していることを表しています。今回の例では、if 文を入力し終えるまで「<<」が表示されます。

実際の実行例を以下に示します。

スクリプトの実行例

スクリプトの実行例

スクリプトファイルを作成する

コマンドラインインターフェースでスクリプトを入力できることがわかりました。今度は、スクリプトファイルを作成してみましょう。

テキストエディタを開いて、以下のスクリプト(先ほどと同じもの)を入力し、「sample.ps1」という名前で任意の場所に保存をしてください。

if ( Test-Path "C:\Work\Temp" ) {
Write-Host "あるよ"
} else {
Write-Host "ないよ"
}
PowerShell のスクリプトファイルの拡張子は「ps1」です。

スクリプトファイルの実行

スクリプトファイルは、ファイル名を入力するだけでは実行できません。

パスを指定する必要があります。

スクリプトファイルがカレントディレクトリにある場合は、以下のようにして実行できます。

Windows の場合

.¥sample.ps1

MacOS や Linux系 OS の場合

./sample.ps1

 

カレントディレクトリ以外にある場合には、以下のようにパスを指定してください。
Windows の場合

C:¥Work¥sample.ps1

MacOS や Linux系 OS の場合

/Users/Hiro/sample.ps1

実行ポリシーの確認と変更

PowerShell Core では、容易にスクリプトを実行できないように、実行ポリシーの設定を行うことができます。

スクリプトが実行できない場合は、実行ポリシーに何が設定されているかを確認し、必要に応じて変更をする必要があります。

実行ポリシーの確認方法

現在設定されいている実行ポリシーは Get-Execution コマンドレットで確認をすることができます。

Get-Execution コマンドレットを実行すると、以下のいずれかの値が返されます。

実行ポリシー 説明
Restricted 全てのスクリプトが制限される。
AllSigned 全ての署名付きスクリプトのみが実行可能。署名がないものは実行禁止。
RemoteSigned ローカルのファイルは実行可能。インターネットからダウンロードした外部スクリプトは署名が必要。
Unrestricted 全てのスクリプトが制限なしで実行可能。インターネットからダウンロードしたスクリプトファイルの場合は実行時に確認される。
Bypass 警告や確認なしで全てのスクリプトファイルが実行される。
Undefined 現在のスコープから現在割り当てられている実行ポリシーを削除します。このパラメーターは、グループ ポリシー スコープ内で設定された実行ポリシーは削除しない。

Windows の場合は、既定値は RemoteSigned、MacOS や Linux 系 OS の場合は Unrestricted です。必要に応じて変更をしてください。

実行ポリシーを変更する

実行ポリシーを変更する場合は Set-ExecutionPolicy コマンドレットを使用します。

ただし、Windows の場合は、管理者権限で起動した PowerShell から実行をする必要があります。

また、現時点では Windows 以外の OS は「スクリプトの署名は現在サポートされていないため、Windows 以外のプラットフォームで PowerShell を実行するときは -ExecutionPolicy スイッチを無視します。 (#3481)」という理由から、ポリシーの変更ができないようです。

Windows PowerShell 5.1 と PowerShell 7.x の相違点 - PowerShell
この記事は、Windows PowerShell 5.1 と、.NET Core に基づく現在のバージョンの PowerShell との違いと破壊的変更についてまとめたものです。

以下に Windows の PowerShell(管理者権限)で実行する場合の例を示します。

例えば、Unrestricted に変更したい場合は、以下のようにします。

Set-ExecutionPolicy Unrestricted

実行ポリシーのスコープ

実行ポリシーにはスコープと呼ばれるものがあります。

スコープとは、PowerShell の実行ポリシーの適用範囲をどこまでにするかを表すもので、以下の物があります。

スコープ 説明
MachinePolicy 実行ポリシーは Machine グループに影響します。
UserPolicy 実行ポリシーは User グループに影響します。
Process 実行ポリシーは現在の Windows PowerShell プロセスにのみ影響します。
CurrentUser 実行ポリシーは現在のユーザーにのみ影響します。
LocalMachine 実行ポリシーはコンピューターのすべてのユーザーに影響します。

現在設定されているスコープを確認する

現在設定されているスコープを確認するには、以下のコマンドを実行します。

Get-ExecutionPolicy -List
Get-ExecutionPolicy -List

Get-ExecutionPolicy -List の実行

スコープを指定してポリシーを設定する

スコープを指定してポリシーを設定するには、以下のようにします。

この例では、実行ポリシー RemoteSigned を CurrentUser 設定します。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

まとめ

よく使用するスクリプトは、スクリプトファイルにまとめておくと便利です。

使用するスクリプトファイルによっては、実行ポリシーの設定が必要ですので確認をするようにしてください。

また、MacOS や Linux 系 OS は、現時点では実行ポリシーの変更ができませんが、将来設定可能になると思われます。その際には、また本ブログで取り上げることとします。

コメント

  1. […] 前回の記事でも少し触れましたが、条件によって実行する処理を分岐させるには if 文を使用します。 […]

タイトルとURLをコピーしました