Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellスクリプト実行ポリシーの構成

既定では、Windowsの設定により、PowerShellスクリプトは実行されません。セキュリティの観点から、信頼できない悪意のあるコードがPowerShellスクリプトから実行されないように制限することが重要です。実行ポリシーは、PowerShellスクリプトを実行するための設定を決定します。この記事では、WindowsでPSスクリプトを実行するために使用できる設定、実行ポリシーを変更する方法、およびGPOを使用してドメインコンピューターのPowerShellスクリプト実行ポリシーを構成する方法について説明します。

このシステムではPowerShellスクリプトの実行が無効になっています

クリーンなWindows10でPowerShellスクリプト(PS1ファイル)を実行しようとすると、次のエラーが発生します。

File C:\ps\script.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

PowerShellスクリプト実行ポリシーの構成

次のコマンドを使用して、WindowsでのPowerShellスクリプト実行ポリシーの現在の設定を取得できます。

Get-ExecutionPolicy

PowerShellスクリプト実行ポリシーの構成

次のPowerShell実行ポリシー値を使用できます。

  • 制限付き – PowerShellスクリプトの実行が無効になっている場合、PSコンソールで実行できるのは対話型コマンドのみです。
  • AllSigned –信頼できる発行元によるデジタル署名付きの署名付きPSスクリプトのみが許可されます(自己署名証明書を使用してスクリプトに署名し、信頼できるルート証明書に追加できます)。信頼できないスクリプトを実行すると、次の警告が表示されます。
    Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers.
  • RemoteSigned –制限なしでローカルPowerShellスクリプトを実行できます。デジタル署名を使用してリモートPSファイルを実行できます(インターネットからダウンロードした、またはUNCパスを介して共有ネットワークフォルダーから起動したPS1ファイルを実行することはできません)。
  • 無制限 –すべてのPowerShellスクリプトの実行が許可されます。サードパーティのPowerShellスクリプトを実行しようとすると、起動の確認を求められる場合があります(以下を参照)。
  • バイパス – PSファイルの実行が許可されます(警告は表示されません)。ポリシーは通常、通知を表示せずにPSスクリプトを自動的に実行するために使用され(たとえば、スクリプトがGPO、SCCM、タスクスケジューラなどを介して実行される場合)、永続的な使用は推奨されません。
  • デフォルト –PowerShellスクリプトの実行設定をデフォルトにリセットします。 Windows 10 PowerShell実行ポリシーのデフォルト値は制限付きです 、および Windows Server 2016 RemoteSigned
  • 未定義 –ポリシーが設定されていません。制限付きポリシーは、デスクトップOSとサーバーOSのRemoteSignedに適用されます。

PowerShellが実行ポリシーを使用してスクリプトを実行できるようにする方法

PowerShellスクリプト実行ポリシーの現在の値を変更するには、 Set-ExecutionPolicy コマンドレットが使用されます。

たとえば、ローカルPSスクリプトファイルの実行を許可しましょう:

Set-ExecutionPolicy RemoteSigned

Yを押して、PS1スクリプトの実行ポリシーの変更を確認します またはA

PowerShellスクリプト実行ポリシーの構成

確認プロンプトが表示されないようにするには、強制を使用できます。 パラメータ。

Set-ExecutionPolicy RemoteSigned –Force

PowerShell実行ポリシーの値を無制限に設定した場合 、インターネットからダウンロードしたUNCパスまたはファイルを使用して共有フォルダからリモートスクリプトを実行しようとすると、引き続きプロンプトが表示されます。

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

PowerShellスクリプト実行ポリシーの構成

PowerShellはローカルスクリプトとリモートスクリプトをどのように区別しますか? ZoneIdが原因です ファイルをダウンロードするときにブラウザが代替ストリームに設定する識別子(「Windowsはファイルがインターネットからダウンロードされたかどうかをどのように知るのですか?」の記事を参照してください)。 ブロック解除をチェックすると、ファイルのブロックを解除できます ファイルのプロパティで、またはUnblock-Fileを使用してゾーンラベルをクリアします コマンドレット。

また、PowerShell実行ポリシーのさまざまなスコープを区別する必要があります。

  • MachinePolicy – GPOを使用して設定され、コンピューターのすべてのユーザーに適用されます。
  • ユーザーポリシー –これもGPOを使用して設定され、コンピューターユーザーに適用されます。
  • プロセス —実行ポリシー設定は現在のPowerShellセッションにのみ適用されます(powershell.exeプロセスが終了した後にリセットされます)。
  • CurrentUser –実行ポリシーは現在のユーザーにのみ適用されます(HKEY_CURRENT_USERレジストリキーのパラメーター)。
  • LocalMachine コンピュータのすべてのユーザーに対するポリシーです(HKEY_LOCAL_MACHINEレジストリキーのパラメータ)。

スコープを使用してポリシースコープを設定できます Set-ExecutionPolicyコマンドレットのパラメーター。例:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

すべてのスコープの現在のExecutionPolicy設定を確認しましょう:

Get-ExecutionPolicy -List

Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Bypass
CurrentUser Undefined
LocalMachine RemoteSigned

PowerShellスクリプト実行ポリシーの構成

CurrentUserスコープとLocalMachineスコープのSet-ExecutionPolicyコマンドレットを使用して設定した実行ポリシー値は、レジストリに保存されます。たとえば、次のコマンドを実行します:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShellレジストリキーを開き、 ExecutionPolicyのREG_SZ値を確認します。 パラメータ。制限付きに変更する必要があります(許可されるパラメータ値は、制限付き、AllSigned、RemoteSigned、バイパス、制限なしです。 および未定義)。

PowerShellスクリプト実行ポリシーの構成

CurrentUserスコープの同じ設定は、 HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShellにあります。 。

これは、グループポリシー設定を使用してレジストリを介してPowerShellスクリプト実行ポリシー設定を展開できることを意味します。

AllSignedを使用したExecutionPolicyに注意してください LocalMachineレベルの値は、企業環境で最も頻繁に使用されます。セキュリティと利便性の最適なバランスを提供します。個人的な使用には、コンピューターのRemoteSigned設定を使用できます。バイパスポリシーは、一部のタスクを実行するためにのみ使用できます(たとえば、GPOまたはタスクスケジューラのタスクを使用してスクリプトを実行するため)。

GPOを使用してActiveDirectoryでPowerShell実行ポリシーを設定する

グループポリシーを使用して、ActiveDirectoryドメイン内のサーバーまたはドメインコンピューター上のPowerShellスクリプトの実行ポリシーを構成できます。

  1. ドメインGPOエディター(gpmc.msc )、新しいGPOを作成するか、既存のGPOを編集して、PowerShellスクリプト実行ポリシーを適用するコンピューターを含むOUにリンクします。
  2. コンピューターを開く構成->ポリシー->管理用テンプレート->Windowsコンポーネント->WindowsPowerShell GPOエディターで、スクリプトの実行をオンにするを見つけます。 パラメータ。ユーザーGPOセクション—ユーザー構成にも同じポリシーがありますが、コンピューターポリシーの方が優先されます。
  3. ポリシーには次の3つの値があります。
    1. 署名されたスクリプトのみを許可する –AllSignedポリシーに対応
    2. ローカルスクリプトとリモート署名済みスクリプトを許可する –PSRemoteSignedポリシーに対応
    3. すべてのスクリプトを許可する –無制限のポリシーに対応
      PowerShellスクリプト実行ポリシーの構成
  4. 必要なポリシー値を設定し、GPOを保存して、コンピューターのグループポリシー設定を更新します。
  5. 新しい実行設定がMachinePolicyスコープに適用されていることを確認してください。
    PowerShellスクリプト実行ポリシーの構成

GPOを使用して実行ポリシーを構成した後は、スクリプト実行ポリシーの設定を手動で変更することはできません。 GPOが適用されているコンピューターで実行ポリシー設定を変更しようとすると、次のエラーが表示されます。

Set-ExecutionPolicy: Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

PowerShellスクリプト実行ポリシーの構成

同様に、ローカルGPOエディター(gpedit.msc)を使用して、スタンドアロンコンピューターで実行ポリシーを構成できます。 WindowsでPowerShell実行ポリシーをバイパスする方法

実行ポリシーの設定を変更せずにコンピューターでPowerShellスクリプトを実行する場合に役立つ、いくつかのトリックがあります。たとえば、管理者として実行されているかどうかを確認する簡単なPS1スクリプトを実行したいと思います。

Get-Contentを使用してスクリプトの内容を取得し、PSコンソールの標準の入力ストリームにリダイレクトできます。

Get-Content c:\ps\check_process_elevation.ps1 | PowerShell.exe -noprofile –

または、バイパスポリシーを使用して新しいpowershell.exeプロセスを実行できます:

powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1

PowerShellスクリプト実行ポリシーの構成


  1. Linuxで簡単なシェルスクリプトを作成する方法

    シェルスクリプトの作成は、Linuxユーザーが指先で習得する必要のある最も重要なスキルの1つです。シェルスクリプトは、行ごとに実行するのが面倒な反復タスクを自動化する上で大きな役割を果たします。 このチュートリアルでは、すべてのLinuxユーザーが持つべき基本的なシェルスクリプト操作のいくつかに焦点を当てます。 1。簡単なシェルスクリプトを作成する シェルスクリプトは、 ASCIIで構成されるファイルです。 文章。まず、簡単なシェルスクリプトを作成します。これを行うには、テキストエディタを使用します。コマンドラインとGUIベースの両方で、かなりの数のテキストエディタがあります。このガイドで

  2. Powershell スクリプトに一時停止を追加する方法 (例あり)

    この記事では、powershell スクリプトに一時停止を追加する方法を紹介します。 一時停止または待機コマンドを追加するには、さまざまな方法があります。以下に、例を挙げてこれらの方法を示します。 Powershell スクリプトに一時停止を追加する方法 Powershell スクリプトに一時停止を追加するには、次の手順に従います PowerShell ISE を開く スタートメニューから 次に、一時停止コマンドを追加する PowerShell スクリプトを開きます start-sleep -Seconds 5 という行を追加します (数字の 5 を、スクリプトを一時停止する秒数に置