Windows PowerShellを実行したい 2017/01/21

Pocket

今回はCドライブのworkspaceフォルダにtest.ps1と言う名前のスクリプトを実行することとします。
拡張ps1は、Windows Powershellのスクリプトであることを表しています。
下記のようにtest.ps1を編集し保存します。
Windows Powershell ISEに下記のように入力し、スクリプトを実行してみましょう。
しかし、下記のようなエラーメッセージが表示され実行できませんでした。

PS C:\workspace> .\test.ps1

.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\workspace\test.ps1 を読み込むことができません。詳細については、「about_Execution_Polici
es」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
これは初期の状態ではスクリプトを実行することが可能なポリシーがポリシーがポリシーが設定されていないためです。

スクリプトを実行するためのポリシーを設定する必要があります。
さきほどのエラーメッセージで表示されているマイクロソフトのウェブサイト(http://go.microsoft.com/fwlink/?LinkID=135170)を確認すると付与できる権限は下記のようになります。
詳細は、マイクロソフトのサイトを確認してください。

Restricted
– 個別のコマンドは許可されますが、スクリプトは実行されません。

AllSigned
– スクリプトを実行できます。
– ローカル コンピューター上で記述されたスクリプトを含むすべてのスクリプトと構成ファイルが、信頼された発行元によって署名されている必要があります。

RemoteSigned
– スクリプトを実行できます。Windows Server 2012 R2 の既定の実行ポリシーです。
– インターネット (電子メールとインスタント メッセージング プログラムを含む) からダウンロードされたスクリプトと構成ファイルが、信頼された発行元によってデジタル署名されている必要があります。
– ローカル コンピューター上で記述された (インターネットからダウンロードされていない) スクリプトには、デジタル署名は必要ありません。
– Unblock-File コマンドレットの使用などによってスクリプトのブロックが解除されている場合は、インターネットからダウンロードされた、署名されていないスクリプトが実行されます。
– インターネット以外をソースとする署名されていないスクリプトや、署名されているが悪意のあるスクリプトが実行される危険性があります。

Unrestricted
– 署名されていないスクリプトを実行できます (悪意のあるスクリプトが実行される危険性があります)。
– インターネットからダウンロードされたスクリプトや構成ファイルを実行する前に、ユーザーに警告します。

Bypass
– 何もブロックされません。警告やプロンプトは表示されません。
– この実行ポリシーは、Windows PowerShell のスクリプトが大きいアプリケーションに組み込まれている構成や、Windows PowerShell が独自のセキュリティ モデルを持つプログラムの基盤になっている構成を対象としています。

Undefined
– 現在のスコープに実行ポリシーが設定されていません。
– すべてのスコープの実行ポリシーが Undefined の場合、有効な実行ポリシーは、既定の実行ポリシーである Restricted になります。
注記:インターネット パスと汎用名前付け規則 (UNC) パスを区別しないシステムの場合、RemoteSigned 実行ポリシーを使用すると、UNC パスで識別されているスクリプトが実行を許可されない可能性があります。

端末で作成したWindows Powershellのスクリプトを実行するだけですので、今回はポリシーを”RemoteSigned”に変更します。
※ 今回は自分で管理しているパソコンであるため変更しています。もし、今お使いのパソコンが会社の所有物であればシステム管理者や組織の上長にポリシーの変更が可能であるか確認する必要があります。
下記のようにコマンドを実行します。

PS C:\workspace> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
実行ポリシーの変更を実行するとポリシーが変更された場合の危険性についての警告がポップアップメッセージとして表示されます。今回は意図的に設定しているため、”はい”ボタンを押下してポリシーを変更します。
[管理者として実行]しなかった場合、下記のようなエラーとなります。
Set-ExecutionPolicy : レジストリ キー ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell’
へのアクセスが拒否されました。 既定 (LocalMachine) のスコープの実行ポリシーを変更するには、[管理者として実行] オプションを使用して Windows PowerShell を起動してください。現在のユーザー
の実行ポリシーを変更するには、”Set-ExecutionPolicy -Scope CurrentUser” を実行してください。
発生場所 行:1 文字:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolic
yCommand

設定されているポリシーを確認します。
PS C:\workspace> Get-ExecutionPolicy
Restricted

これでWindows Powershellのスクリプトを実行することが可能になりました。

 

Trackback URL

Leave a Reply