SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows PowerShell 入門

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

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

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

 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を作成したり、削除したりして動作を確認してみてください)。

次のページ
スクリプトファイルのエラー修正

この記事は参考になりましたか?

Windows PowerShell 入門連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2259 2008/03/12 12:22

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー