Powershell スクリプト実行 許可

Powershell スクリプト実行 許可

こんにちは。
けいぞうです。

PowerShellのスクリプト(ps1)ファイルが何故か動いてくれないことが稀に良くあります。

その代表的な原因と対処方法を解説します。

[目次]

  • スクリプトの実行ポリシーが有効になっていない場合
  • スクリプトがロックされている場合
  • 詳細説明

目次

  • 1 スクリプトの実行ポリシーが有効になっていない場合
    • 1.1 実行ポリシーの確認
    • 1.2 実行ポリシーを変更する
  • 2 スクリプトがロックされている場合
  • 3 詳細説明

スクリプトの実行ポリシーが有効になっていない場合

ps1ファイルを実行すると以下のようなメッセージが出る場合は、スクリプトの実行ポリシーが有効になっていないと考えられます。

.\<ファイル名> : このシステムではスクリプトの実行が無効になっているため、ファイル <フルパス> を読み込むことができません。詳細については、「about_Execution_Policies」(http
s://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
.\<ファイル名>
~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

Windowsでは、ps1ファイルの実行が初期設定では無効になっています。ps1ファイルの実行を許すかどうかの設定を「実行ポリシー」と呼びます。

実行ポリシーの確認

実行ポリシーは、以下のコマンドレットを打てば確認できます。

Get-ExecutionPolicy

Powershell スクリプト実行 許可

上記のエラーになった人は「Restricted」が返ってきたはずです。

実行ポリシーを変更する

細かい話は一旦抜きにして、以下の方法で実行ポリシーを変更して、ps1ファイルを実行できるようにすることができます。

PowerShellを管理者として起動します。

Powershell スクリプト実行 許可

以下のコマンドを実行します。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

確認メッセージが表示されるので「Y」を打ってEnter

Powershell スクリプト実行 許可

これで実効ポリシーが変更されました。

試しにもう一度Getで実行ポリシーを確認してみてください。

Powershell スクリプト実行 許可

「RemoteSigned」が返ってくればOKです。

この状態で、お目当てのps1ファイルを実行してみてください。実行できるようになっていると思います。

スクリプトがロックされている場合

実行ポリシーを「RemoteSigned」に設定すると

Web上からダウンロードされたスクリプトが、信頼された発行元によって署名されていることを要求する

という状態になります。

ダウンロードしてきたps1ファイルが信頼されていないと判断されて、スクリプトにロックがかかった状態になっていることがあり、それが原因でps1が実行できないことがあります。

ロックされているかどうかは、ps1ファイルを右クリックしてプロパティで確認することができます。

Powershell スクリプト実行 許可

Webからダウンロードしてきたサンプルファイルなどはこのような状態になることが多いです。

この場合は、「許可する」にチェックを入れてOKを押せばロックを解除できます。

詳細説明

実効ポリシーを「RemoteSigned」に変更すれば実行できると説明しましたが、ポリシーは「RemoteSigned」以外にもあります。

ポリシー説明
Restricted
(既定値)
スクリプトは実行されない
AllSigned 全てのスクリプトは発行元により署名されていることを要求する
RemoteSigned Web上からダウンロードしてきたすべてのスクリプトは発行元により署名されていることを要求する
Unrestricted 全てのスクリプトを実行する(ただし、確認を求められる)
Bypass 確認なしで全てのスクリプトを実行する
Undefined 現在のScopeから割り当てられている実行ポリシーを削除する

「Scope」という単語が出てきましたが、実は実行ポリシーはScope毎に割り当てられています。

Set-ExecutionPoricyコマンドでは、規定値で「LocalMachine」がScopeになっているので、このコンピュータ全体の実行ポリシーを変更したことになります。

Scope説明
Process 現在実行中のプロセスのみが割り当て範囲となる
CurrentUser 現在実行中のユーザーに対してのみが割り当て範囲となる
LocalMachine コンピュータ全てのユーザーに対してが割り当て範囲となる

例えば、以下のようにコマンドを実行すれば、一時的なポリシーの変更だけでps1ファイルを実行することができます。

Write-Host “Y” | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
.\<実行したいps1ファイル>

「Write-Host “Y”」を頭につけてパイプで繋げば、1行で確認メッセージに「Y:はい」を入力することができます。その後に実行したいps1ファイルを実行してあげればOKです。

こうすれば、このプロセスが破棄された後は、元の実行ポリシーに戻るので、違う環境で実行する可能性があるスクリプトを開発する場合はこの手法をオススメします。

Windows PowerShellの実行方法は?

スクリプトはコマンドラインからだけでなく、Windows10のエクスプローラー上からアイコンを選択して実行することもできます。 エクスプローラーでps1ファイルを選択して、マウスの右クリックで「PowerShell実行」を選択します。 するとPowerShellが立ち上がって、ps1ファイルが実行されます。

PowerShellの実行制限は?

クライアント版 Windows1PowerShell は、標準設定ではスクリプト(拡張子 .ps1 のファイル)の実行制限されています。 これは、マルウェアなどの危険なスクリプトの不用意な実行を防ぐというセキュリティ上の配慮によるものです。 スクリプトを実行するには、事前に実行ポリシーを変更する必要があります。

PowerShell 管理者権限かどうか?

PowerShell管理者権限で起動しているかどうかの見分け方 現在起動している「PowerShell」がどのアカウント権限で起動しているかは、ウィンドウ左上を見るとわかります。 管理者権限PowerShellが起動していると、「管理者PowerShell」と表示されます。

PowerShell 何ができるのか?

PowerShellパワーシェル)でできること PowerShellでは複雑な命令や処理を下すことで、指定のファイルを移し替えたり、ExcelやWordを一元的に管理することができます。 反復作業など、PowerShellを使うことで業務の効率化を図ることが可能です。