web-dev-qa-db-ja.com

このシステムではスクリプトの実行が無効になっているため、.ps1をロードできません

私はこのコードを実行して、ASP.NETアプリケーションからPowerShellコードを実行します。

System.Management.Automation.Runspaces.Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace();
runspace.Open();
System.Management.Automation.Runspaces.Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(@"\\servername\path");

pipeline.Commands.Add("Out-String");

Collection<PSObject> results = pipeline.Invoke();

runspace.Close();

しかし、私はエラーを受けています:

このシステムではスクリプトの実行が無効になっているため、.ps1をロードできません。詳しくは "get-help about_signing"をご覧ください。

同じコードがコマンドプロンプトまたはWindows(Windowsフォーム)アプリケーションから正常に実行されます。

105
umesh.chape

スクリプトは 実行ポリシー により実行がブロックされています。

PowerShellを管理者として実行し、クライアントPCでそれをUnrestrictedに設定する必要があります。これを行うには、Invokeを呼び出します。

Set-ExecutionPolicy Unrestricted
127
ghord

他の回答で提案されている手順に従い、実行ポリシーが正しく設定されていることを確認し、それでもスクリプトが失敗するようなシナリオがいくつかあります。これが起こるのであれば、おそらく32ビット版と64ビット版の両方のPowerShellを備えた64ビットマシン上にあり、実行ポリシーが設定されていないバージョンで失敗が起こっています。 この設定は両方のバージョンには適用されないため、明示的に2回設定する必要があります。

System32とSysWOW64のためにあなたのWindowsディレクトリを調べてください。

各ディレクトリに対してこれらの手順を繰り返します。

  1. WindowsPowerShell\v1.0に移動し、powershell.exeを起動します。
  2. ExecutionPolicyの現在の設定を確認します。

    Get-ExecutionPolicy -List

  3. 必要なレベルと範囲にExecutionPolicyを設定します。次に例を示します。

    Set-ExecutionPolicy -Scope LocalMachine Unrestricted

ポリシーを設定しようとしている範囲によっては、PowerShellを管理者として実行する必要がある場合があります。

もっとここで読むことができます: Windows PowerShellスクリプトを実行する

75
Jon Crowell

問題は、実行ポリシーがユーザーごとに設定されていることです。アプリケーションを動作させるには、実行するたびにアプリケーションで次のコマンドを実行する必要があります。

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

おそらくASP.Netユーザーにもこれを設定する方法がありますが、この方法はあなたがあなたのシステム全体、あなたのアプリケーションだけを開かないことを意味します。

出典

21

Set-ExecutionPolicyを実行する必要があります。

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned PowerShell scripts to run.

Set-ExecutionPolicy Restricted <-- Will not allow unsigned PowerShell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Will allow only remotely signed PowerShell scripts to run.
19
Nadeem_MK

私は同様の問題を抱えていて、Windows Server 2012のデフォルトのcmdがx64のものを実行していたことに注意しました。

Windows 7、Windows 8、Windows Server 2008 R2、またはWindows Server 2012の場合は、管理者として次のコマンドを実行します。

x86

C:\ Windows\SysWOW64\cmd.exeを開きます。次のコマンドを実行します。powershell Set-ExecutionPolicy RemoteSigned

x 64

C:\ Windows\system32\cmd.exeを開きます。powershell Set-ExecutionPolicy RemoteSignedコマンドを実行します。

あなたが使用してモードを確認することができます

CMDの場合:echo%PROCESSOR_ARCHITECTURE%Powershellの場合:[環境] :: Is64BitProcess

これがお役に立てば幸いです。

1