目次
あなたのような読者が、MUOを支えています。当サイトのリンクを利用して購入された場合、アフィリエイト報酬を得ることがあります。続きを読む
iPowerShellは、デフォルトではコンソールからコマンド(cmdlet)を実行することができます。スクリプトを実行するには、スクリプトコードを記述したメモ帳ファイルを作成し、.ps1ファイルの拡張子で保存して、PowerShellコンソールから実行することができます。また、スクリプトを直接コンソールに貼り付けて実行することも可能です。
しかし、PowerShellで初めてスクリプトを実行する場合、"running script is disabled"というエラーが発生します。デフォルトでは、悪意のあるスクリプトがシステム上で実行されるのを防ぐためのセキュリティ対策として、PowerShellでのスクリプト実行は無効になっています。ここでは、Windows PowerShellでスクリプトの実行ポリシーを有効にする2つの方法を紹介します。
既存の実行ポリシーを確認する方法
PowerShellコマンドレットを使用すると、現在の実行ポリシーを取得することができます。現在の実行ポリシーを知ることは、ポリシー変更が必要か否かを知るために必要です。
現在のユーザーに対する実行ポリシーを取得する。
- Windows PowerShellを管理者として開きます。
- PowerShellコンソールに以下のコマンドを入力し、Enterを押す:get-executionpolicy
- スクリプトの実行時にエラーが発生したため、現在の実行ポリシーとしてRestrictedが表示される可能性があります。
- サポートされているすべてのスコープの実行ポリシーを表示する必要がある場合は、次のようにします。
ローカルスクリプトをエラーなく実行するには、実行ポリシーをRemoteSignedに変更する必要があります’。実行ポリシーは、設定アプリとPowerShellから変更することができます。
設定アプリを使用してPowerShell実行ポリシーを有効にする方法
PowerShellの実行ポリシーをRemoteSignedに変更・設定するには、「設定」アプリを使用します。developers’セクションのPowerShell設定をいじって、実行ポリシーを変更してPowerShellスクリプトの実行を可能にすればいいのです。
設定」を使って実行ポリシーを変更する場合。
- Win I を押して「設定」を開きます。
- プライバシーを開く&。左ペインの「セキュリティ」タブをクリックします。
- 次に、[開発者向け]をクリックします。
- PowerShell] セクションをクリックし展開します。
- スイッチを切り替えて、実行ポリシーを「ローカルPowerShellスクリプトを署名なしで実行できるようにする – リモートスクリプトに署名を要求する」に変更します。
- 完了したら、PowerShellを開き、get executionpolicyと入力し、Enterを押します。これで、現在のユーザーの実行ポリシーが RemoteSigned に設定されました。
- 実行ポリシーを無効にする必要がある場合は、PowerShellのスイッチを切り替えて、Offに設定します。
PowerShellを使用してPowerShellでスクリプトの実行を許可する方法
PowerShellコマンドレットを使用して、実行ポリシーをRemoteSignedに設定することができます。コマンドラインインターフェイスを使用することで、設定アプリを使用せずに実行ポリシーを簡単に素早く変更することができます。
また、設定アプリで有効・無効にできるのはRemoteSignedの実行ポリシーのみです。PowerShellでは他のポリシーやスコープも設定できるのに対して。
PowerShellを使用して実行ポリシーを変更する場合。
- PowerShellを管理者権限で開きます。
- PowerShellウィンドウで、以下のコマンドを入力し、Enterキーを押します。Set-ExecutionPolicy RemoteSigned
- プロンプトが表示されたら、A を押して動作を確認
します。
- これにより、すべてのユーザーに対してRemoteSigned実行ポリシーが設定されます。現在のユーザーのみに実行ポリシーを設定する場合は、Scopeパラメータに続いてユーザー名を使用します。
- 例えば、CurrentUserに対してRemoteSignedの実行ポリシーを設定する場合は、以下のコマンドを使用します。Set-ExecutionPolicy RemoteSgined-ScopeCurrentUser
- 上記コマンドのCurrentUserを、要件に応じて他のユーザー(Scope
)に置き換えます。
PowerShellを使用してスクリプト実行ポリシーを削除する方法
スクリプトの実行を無効にしたい場合は、Set_ExecutionPolicyコマンドレットを使用して、実行ポリシーをUndefinedに設定します。これはデフォルトの状態で、PowerShellがスクリプトを実行しないようにします。
PowerShellを使ったスクリプトの実行を無効にする。
- PowerShellを昇格した権限で開きます。
- 次に、以下のコマンドを入力し、Enterキーを押して、すべてのユーザーに対してスクリプトの実行を無効化します。セットエクセキューションポリシー undefined
- 上記のコマンドを実行すると、すべてのユーザーに対して実行ポリシーのデフォルト(未定義)が設定されます。特定のスコープに対してスクリプトの実行を無効化したい場合は、以下のコマンドを使用します。Set-ExecutionPolicy undefined-Scope CurrentUser
- 上記のコマンドは、CurrentUserのスクリプト実行を無効化します。
実行ポリシーとスコープを理解する
PowerShellの実行ポリシーとは、PowerShellが設定ファイルやスクリプトをどのように実行するかを制御するポリシーのことで、簡単に言えば、PowerShellの実行ポリシーです。その目的は、ユーザーが誤って悪意のあるスクリプトを実行するのを防ぐことです。PowerShellの実行ポリシーは、Default、Restricted、RemoteSigned、AllSigned、Unrestricted、Bypass、Undefinedの7つです。
PowerShellの実行ポリシーについて、下表で簡単に説明します。
実行方針 | エンフォースメント |
デフォルト | デフォルトの実行ポリシーを、Windows ClientではRestricted、Windows ServerではRemoteSignedに設定します。 |
オールサイン入り | パブリッシャー署名付きスクリプトの実行を許可します。 |
バイパス | 大規模なアプリケーションのためのスクリプトの無制限な実行。 |
リモートサイン | ローカルに書かれたスクリプトの実行を許可する。インターネットからダウンロードしたスクリプトにはデジタル署名が必要です。 |
制限あり | スクリプトの実行はできませんが、個別のPowerShellコマンドの実行は可能です。 |
未定義 | 実行ポリシーをWindowsクライアントはRestricted、Windows ServerはRemoteSignedに設定します。 |
制限なし | インターネットからダウンロードしたスクリプトに対して、警告を表示した上で、署名のないスクリプトの実行を許可する。 |
実行ポリシー範囲
PowerShellでは、特定のスコープに対して実行ポリシーを設定することができます。実行ポリシーのスコープは、MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachineの5つです。
下表は、すべての実行ポリシースコープを簡単に説明したものです。
実行ポリシー範囲 | エンフォースメント |
ユーザーポリシー | 現在のユーザーのグループポリシーによって設定されます。 |
マシンポリシー | すべてのユーザーに対して、グループポリシーで設定する。 |
カレンユーザー | 現在のユーザーに対して設定され、HKEY_CURRENT_MACHINEレジストリサブキーに格納されます。 |
LocalMachine | すべてのユーザーに対して設定され、HKEY_CURRENT_MACHINEレジストリサブキーに格納されます。 |
プロセス | 現在のPowerShellセッションに影響し、セッションが閉じられると自動的に削除されます。 |
WindowsでPowerShellスクリプト実行ポリシーの追加と削除を行う。
PowerShellのスクリプト実行は、Windowsクライアントではデフォルトで無効、WindowsサーバーではRemoteSignedに設定されています。しかし、パワーユーザーは、実行ポリシーを変更して、ローカル、署名付き、および署名なしのPowerShellスクリプトを実行することができます。
また、スクリプトをPowerShellコンソールに貼り付けたり、スクリプトをPowerShell標準入力にECHOすることで、PowerShellの実行ポリシーをバイパスすることもできます。これは、実行ポリシーを変更せずにスクリプトを実行したい場合に有効です。