CodeZine(コードジン)

特集ページ一覧

Windows PowerShell 入門(3)-スクリプト編

PowerShellで可能なスクリプトの作成方法の習得

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/03/11 14:00

目次

スクリプトファイルの作成

 PowerShellにおけるスクリプトファイルは、拡張子が「.ps1」のテキストファイルです。テキストファイルなので、メモ帳などのテキストエディタで作成することが可能です。

 では、先ほどのコードをテキストエディタで入力し、「sample1.ps1」と名前を付けて保存しましょう(可能であれば「C:\Work」というフォルダを作成し、ここへ保存してください。以降このフォルダを使用して説明します。任意のフォルダへ保存する場合は適宜読み替えてください)。

sample1.ps1
if ( Test-Path “Test.txt” )
{
  Write-Host "Test.txtは存在します"
}
else
{
  Write-Host "Test.txtは存在しません"
}

スクリプトファイルの実行とセキュリティ

 従来のスクリプティング環境のほとんどは、作成したスクリプトファイルをダブルクリックで実行することができました。しかしPowerShellでは、ダブルクリックでは実行されないように設計されています。これは簡単に実行できることで悪意のあるスクリプトファイルから身を守ることができるようへの配慮からです。

 ためしに「sample1.ps1」をダブルクリックしてみてください。メモ帳で「sample1.ps1」が開かれるのではないでしょうか? スクリプトに使用される「.ps1」という拡張子がPowerShellに関連づけられていないため、このような動作になります。

 PowerShellでは、スクリプトファイルは明示的に実行する必要があります。

 まずはコンソールウィンドウで、

cd C:\Work 

 と入力し、ディレクトリを移動します。次に、

sample1.ps1 

 と入力し[Enter]キーを押してみてください。

 まだエラーが発生してしまいます。このように実際にはスクリプトファイル名を入力するだけでは不十分です。PowerShellでは、スクリプトファイルの実行は絶対パスで指定するか、カレントディレクトリのファイルの場合は先頭に./を付けて実行します。

 では、なぜこんな面倒くさいことをしなければならないのでしょうか? 実はスクリプトの実行は拡張子を省略して入力できるのですが、拡張子を省略すると、既存のコマンドレットと同名のファイル名を付けた場合には、自作のスクリプトと既存のコマンドレットの区別ができなくなってしまいます。これはコマンドの乗っ取りと呼ばれます。

 例えば「Get-Command.ps1」という名前のファイルがあったとします。これを、

Get-Command[Enter]

 で実行可能だとしたらどうでしょう?

 既存のGet-Commandコマンドレットとの区別がつかなくなりますし、ましてやこのスクリプトがファイルを勝手に削除してしまうようなスクリプトだとしたら大変です。

 このような背景から、PowerShellでのスクリプト実行は絶対パス、またはカレントディレクトリのファイルの先頭に./を付けて実行する仕組みとなっています。

 これで、スクリプトの実行方法についてはわかりました。しかし、このままでは実行できません。PowerShellは、既定ではスクリプトの実行が許されていないからです。

 コンソールウィンドウに、

Get-ExecutionPolicy

 と入力し[Enter]キーを押してください。Restrictedと返ってきたのではないでしょうか? このコマンドレットは現在の実行ポリシーの設定を確認することができます。

 実行ポリシーには以下の4つがあります。

実行ポリシー
実行ポリシー説明
Restrictedすべてスクリプトの実行を禁止
AllSignedすべてのスクリプトに証明書を要求
RemoteSignedインターネットからダウロードしたスクリプトに証明書を要求
Unrestrictedすべてのスクリプトの実行を許可

 現段階では、自分のPCにあるスクリプトファイルが実行できれば良いので、実行ポリシーをRemoteSignedに設定しましょう。Set-ExecutionPolicyコマンドレットで実行ポリシーを変更することができます(OSがWindows Vistaの方は、Windows PowerShellを管理者として実行していないとこのコマンドレットを使用することができないので注意してください)。

Set-ExecutionPolicy RemoteSigned

 と入力し[Enter]キーを押してください。これでやっとスクリプトファイルを実行できるようになりました。

 では、「sample.ps1」を実行してみましょう。コンソールウィンドウで、

./sample1.ps1

 と入力し[Enter]キーを押してください。

 「C:\WorkにTest.txt」が存在すれば「Test.txtは存在します」を、存在しなければ「Test.txtは存在しません」と表示されるはずです(Test.txtを作成したり、削除したりして動作を確認してみてください)。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windows PowerShell 入門

もっと読む

著者プロフィール

  • HIRO(ヒロ)

    HIRO's.NETのHIROです。 とある半導体工場のSEです。 VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。 最近はBlog でPowerShellについて書いています。 2008/07/07にPowerShell from Japan!!という...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5