ローカルで作成したスクリプトがRemoteSigned実行ポリシーで実行できないのはなぜですか?


98

この質問は、質問の本文で反論されているか、実際の問題に対処していない回答を引き付け続けているため、知っておくべきことの簡単な要約を読んください

  • これはない「なぜPowerShellの私のデフォルトのインストールが実行されませんスクリプトの?」質問。
  • これはない「なぜPowerShellの実行スクリプトの私のインストールは、インターネットからダウンロードしないのだろうか?」質問。
  • 問題は、RemoteSigned実行ポリシーがスクリプトの実行を禁止しているのに、なぜ禁止しているのかということです。
  • RemoteSigned使用したい実行ポリシーはこれだけです。 他の制限の少ないポリシーが利用可能であることを認識しています。それらのポリシーが受け入れ可能な代替である場合、私は代わりにそれらを使用しただけであり、この質問は存在しません。
  • 実行ポリシーはすでにに設定されていRemoteSignedます。 からRemoteSignedに変更することRemoteSignedは解決策ではありません。
  • スクリプトファイルはローカルで作成および保存されます。
  • スクリプトファイルはブロックされません。 スクリプトファイルがブロックされることはありませんでした(前のポイントを参照)。
  • ブロックを解除するものがないため、スクリプトファイルのブロックを解除することはできません(前のポイントを参照)。
  • スクリプトファイルは、管理者によって実行されます(実行されようとします)。
  • Windows PowerShell関係する唯一のアプリケーションです。また、他のツールやエディターも関係 ありWindows PowerShell ISEませCommand Promptん。
  • 問題の原因はすでに特定されいます(承認された回答を参照)。ほぼ8年後、該当するかどうかにかかわらず、他のすべての明白な説明も投稿されたと思います。そうでない場合は、質問と既存の回答をすべて読んでから、追加してください。

64ビットのWindows7ProfessionalでWindowsPowerShell2.0を使用しています。スクリプトDesktopを実行しようとすると、次のエラーが発生します。

File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system.  Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

私はドメイン管理者とローカル管理者の両方であり、実行するとGet-ExecutionPolicy -ListGroup Policy ObjectPowerShellを構成するために作成RemoteSignedしたものがマシンレベルで実行ポリシーを正しく適用していることがわかります。

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

でスクリプトを自分で作成しNotepadSysinternalsstreamsユーティリティとファイルPropertiesダイアログを使用して、スクリプトがインターネットからのものとして扱われていないことを確認しました。スクリプトをドメインサーバー上のネットワーク共有にコピーすると、実行が許可されます。実行してSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachineも、ローカルスクリプトの実行は許可されません。これは、MachinePolicyスコープの実行ポリシーが優先されるため、理にかなっています。

about_Execution_Policies現在;質問の時点で)によって文書化されているように、RemoteSignedポリシーは次のことを意味します。

  • スクリプトを実行できます。

  • インターネットからダウンロードされるスクリプトおよび構成ファイル(電子メールおよびインスタントメッセージングプログラムを含む)に、信頼できる発行元からのデジタル署名が必要です。

  • 実行し、ローカルコンピューター(インターネットからダウンロードされていない)で作成したスクリプトにデジタル署名は必要ありません。

  • インターネット以外のソースからの署名されていないスクリプトと、署名されているが悪意のあるスクリプトを実行するリスク。

私のスクリプトは署名されていませんが、ローカルで作成および実行されるため、上記の3番目の箇条書きを満たす必要があります。したがって...

  • スクリプトの実行が許可されないのはなぜですか?
  • その要件がインターネットからのファイルにのみ適用される必要があるのに、PowerShellがスクリプトが「デジタル署名されていない」と文句を言うのはなぜですか?
  • PowerShellが、ネットワーク共有から実行されたときにスクリプトが署名されていないことを気にしないのはなぜですか?

1
@Downvoter:理由を教えてください。
ベーコン2017年

回答:


125

ファイルはブロックされていますか?同じ問題が発生し、.PS1ファイルの[プロパティ]を右クリックして[ブロック解除]を選択することで解決できました。


1
説明したように、スクリプトはハードドライブに直接作成されており(どこからもダウンロードされていません)、別のゾーンから発信されたものとして識別する代替ストリームがないことを確認しました(Internet Explorerや他のWebブラウザーが作成するように)。実行し'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;ても、スクリプトがデジタル署名されておらず、実行されないというエラーが表示されます。新しく作成したファイルの[プロパティ]ダイアログを開くと、ブロックを解除するものがありません。
ベーコン2013

48
〜「プロパティとブロック解除の選択」とはどういう意味ですか?
IgorGanapolsky 2016

1
@IgorGanapolskyエクスプローラーで意味するps1ファイルを見つけ、ファイルを右クリックしてコンテキストメニューを表示し、を選択しますProperties。下部にある最初のタブで、ファイルがブロックされていることを示し、チェックボックスをオンにしてブロックを解除できます。
Lankymart 2017年

1
zipファイルをダウンロードした場合は、zipファイルを解凍する前にブロックを解除して、その中のすべてのファイルのブロックを一括解除しないようにする必要があることに注意してください。
オハドシュナイダー

14
@Lankymart Windows 10はこれを試しましたが、ブロックされているとは言いません。
Alan Baljeu 2018年

119

チェックするいくつかの事柄:

無制限に変更できますか?

Set-ExecutionPolicy Unrestricted

グループポリシーは設定されていますか?

  • Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
  • User Configuration\Administrative Templates\Windows Components\Windows PowerShell

また、Script.ps1をどのように呼び出していますか?

これで実行できますか?

powershell.exe -executionpolicy bypass -file .\Script.ps1

Scopeパラメータのデフォルト値はLocalMachineですのでSet-ExecutionPolicy UnrestrictedSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine私がすでに試したものと実質的に同じです。はい、Turn on Script Executionポリシーはに対して有効になっていComputer Configurationます。 PowerShellに開くC:\Users\UserNameので.\Desktop\Script.ps1、プロンプトで実行します。絶対パスを使用すると、を介してスクリプトを呼び出す場合と同じエラーが発生しますpowershell.exe
ベーコン2012年

グループポリシー設定を無効にして、で更新してみましたgpupdate /forceか?(PowerShell.exeを後で再起動します)
Andy Arismendi 2012年

まあ、長い間私はとして実行中UnrestrictedLocalMachineスコープが、私は、私は他のコンピュータから実行したいスクリプトを書き始めたとき、私はセットLocalMachineバックへUndefinedとセットに現在のグループポリシーを追加RemoteSignedMachinePolicyスコープ。これは1回限りのテストスクリプトであり、代わりにネットワークから実行することは実際には大したことではありません。ローカルで機能しない理由を知りたいだけです。結局のところ、ローカルで作成されたスクリプトは、で実行できるようにする必要がありRemoteSignedますよね?何か足りないものや理解できないものがあるに違いないと思っただけです。
ベーコン2012年

@BACONメモ帳でデスクトップにRemoteSigned保存Write-Host hiすることについては正しいです。正常に実行されるはずです。構成も問題ないようです...何かが壊れているようです...そのため、グループポリシーを削除して、問題が解決するかどうかを確認することをお勧めしました。
Andy Arismendi 2012年

1
開発では-executionpolicy bypass、リモート署名の問題を一時的に回避するために使用していました...これにより、他の問題を発見してデバッグすることができました(無関係で、PowerShellのアップグレードが必要でした)。
Doug_Ivison 2018

13

私はついにこれを.NETCode AccessSecurityまで追跡しました。ネットワーク共有に保存され、ネットワーク共有から実行される、社内で開発されたバイナリモジュールがいくつかあります。.NET 2.0 / PowerShell 2.0でそれらを読み込むために、IntranetコードグループにURLルールを追加して、そのディレクトリを信頼しました。

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups
Microsoft (R) .NET Framework CasPol 2.0.50727.5420
Copyright (c) Microsoft Corporation.  All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1.  All code: Nothing
    1.1.  Zone - MyComputer: FullTrust
        1.1.1.  StrongName - ...: FullTrust
        1.1.2.  StrongName - ...: FullTrust
    1.2.  Zone - Intranet: LocalIntranet
        1.2.1.  All code: Same site Web
        1.2.2.  All code: Same directory FileIO - 'Read, PathDiscovery'
        1.2.3.  Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust
    1.3.  Zone - Internet: Internet
        1.3.1.  All code: Same site Web
    1.4.  Zone - Untrusted: Nothing
    1.5.  Zone - Trusted: Internet
        1.5.1.  All code: Same site Web

インストールされている.NETのバージョンと、それが32ビットまたは64ビットのWindowsであるかどうかに応じてcaspol.exe、それぞれ独自のセキュリティ構成(security.config)を持つ次の場所に存在する可能性があることに注意してください。

  • $Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\

グループを削除した後1.2.3...。

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3.
Microsoft (R) .NET Framework CasPol 2.0.50727.9136
Copyright (c) Microsoft Corporation.  All rights reserved.

The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
yes
Removed code group from the Machine level.
Success

...デフォルトのCAS構成のままで、ローカルスクリプトが再び機能するようになりました。CASをいじってからしばらく経ちましたが、ルールが許可FullTrustを妨げるように見える理由はわかりませんMyComputerが、CASは.NET 4.0(PowerShell 3.0のベース)で非推奨になっているため、今は議論の余地があると思います。


どのようにしてURLルールを追加しましたか?私は同じ問題を抱えていて、これが私がそれを解決するのに役立つことを願っています。ありがとう。
OptimusPrime

一緒caspol.exeに仕事をしてからかなり長い時間が経ちましたが、実行した後、この回答に見られるcaspol.exe -machine -addgroup 1.2 -url file://Server/Share/Directory/WindowsPowerShell/Modules/* FullTrustのと同じ1.2.3.ルールになりました。私はfile://URLを使用してSMB共有上のディレクトリを参照していましたが、ドキュメントにある-addgroup 例の1つがUNCパスを使用していることがわかります。
ベーコン

11

DropboxにマップされたドライブのPS1ファイルを実行すると、常にこのエラーが発生することがわかりました。PS1のプロパティを開くとき、「ブロック解除」はありません。

私のために働く唯一のものは

powershell.exe-executionpolicyバイパス-ファイル。\ Script.ps1


1
スクリプトはネットワーク共有にマップされたドライブに保存されているとおっしゃっていますか?または、スクリプトはマップされたドライブを作成しますか?前者の場合、質問の本文とタイトルに記載されているように、スクリプトはローカルで作成および保存されているため、スクリプトの発信元/ゾーンは要因になりません。いずれにせよ、Bypass実行ポリシーの使用は5年以上前から、最近では5か月前までにすでに提案されています。回答する前に、質問と既存の回答をお読みください。
ベーコン2018年

6

ファイルがネットワーク上の場所、つまり別のコンピューターからコピーされた場合、Windowsがそのファイルをブロックしている可能性があります。ファイルを右クリックし、ブロック解除ボタンをクリックして、機能するかどうかを確認します。


2
質問と@ O-Doggの回答に対するコメントの両方で説明したように、スクリプトはハードドライブに直接作成されており(どこからもダウンロードされていません)、別のゾーンから発信されていることを識別する代替ストリームがないことを確認しました(Internet Explorerや他のWebブラウザが作成するように)。実行した場合'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;でも、スクリプトがデジタル署名されておらず、実行されていないというエラーが発生しました。新しく作成したファイルの[プロパティ]ダイアログを開いた場合、ブロックを解除するものは何もありませんでした。
ベーコン2013年

マップされたドライブで作成および実行していないことを確認する価値があります。たとえば、サーバーでは、各ユーザーのホームフォルダーは、個人フォルダーにマップされたドライブです。
カルター2018年

0

これはIDEの問題です。PowerShellGUIで設定を変更します。[ツール]タブに移動し、[オプション]、[デバッグオプション]の順に選択します。次に、[署名するスクリプトの要件をオフにする]チェックボックスをオンにします。完了。


OPは明らかに、スクリプトが署名なしで実行されることを望んでおらず、IDEを参照していませんでした。
kfsone 2018

1
Powershell ISEでは使用できません
Josh Noe

0

私にとってうまくいったのは、.ps1ファイルを右クリックしてからプロパティを右クリックすることでした。「ブロック解除」ボタンをクリックします。ポリシーの変更に何時間も費やした後、私は大いに役立ちます。


1
質問に述べられていることを無視し、これと同じ適用できない解決策を示唆する2つの答えがすでにあります。「スクリプトがインターネットからのものとして扱われていないことを確認するために、Sysinternalsのストリームユーティリティとファイルのプロパティダイアログを使用しました」と「ローカルで作成および実行された」と非常に明確に書きました。タイトルには、スクリプトが「ローカルで作成された」とさえ書かれています。ブロックを解除するものは何もありません。スクリプトのブロックを解除することで問題が解決した場合は、前述のようにスクリプトがブロックされていないため、同じ問題は発生しませんでした。-1。
ベーコン2016年

1
@BACON公平を期すために、私はあなたと同じ症状を示し、私にとってはブロック解除が機能しました。スクリプトはローカルで作成されたものですが、保存し後は毎回ブロックを解除する必要がありました。
SQB 2018年

これはおそらく回避策ですが、完全に正しい解決策ではありません
Mo Zaatar 2018

0

script.bs1ファイルのバックアップを作成してください

私にとってうまくいったのは、script.bs1ファイルを削除して実行コマンドを実行することでした。


1
これを行うことで解決された、表示されたエラーメッセージは何ですか?
ベーコン

私はこのエラーを2回経験し、同じ方法で修正しました。CMDから実行コマンドを実行すると、同じ名前で拡張子が(.cmd)の別のファイルですぐに実行されるようです。
単純な抽象化

ファイルC:\ Users \ UserName \ Desktop \ Script.ps1を読み込めません。ファイルC:\ Users \ UserName \ Desktop \ Script.ps1はデジタル署名されていません。スクリプトはシステム上で実行されません。((Script.ps1はデジタル署名されていないエラー))
単純な抽象化

そうですか。そして、実行すると何が返されますGet-ExecutionPolicy -Listか?
ベーコン

MachinePolicy AllSigned、UserPolicy Undefined、Process Undefined、CurrentUser RemoteSigned、LocalMachine Bypass
単純な抽象化

-1

Powerシェルの代わりにターミナルコマンドプロンプトを選択します。それはうまくいくはずです。


2
これはどういう意味ですか?どこで選択しますか?目標は、PowerShellでPowerShellスクリプトを実行することでした。そのため、PowerShell以外のものを使用しても機能しません。
ベーコン

-1

.ps1 PowerShellスクリプトを実行すると、「。ps1はデジタル署名されていません。スクリプトはシステム上で実行されません。」これを修正するには、以下のコマンドを実行してSet-ExecutionPolicyを実行し、実行ポリシー設定を変更する必要があります。

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

別の回答は、Bypass実行ポリシーの使用をすでに提案しています。とにかく、別のポリシーを使用しても役に立たず、RemoteSigned本当に必要な場合は実際の問題に対処しません。最後に、参照するエラーメッセージは、質問のメッセージと同じではありません。
ベーコン

-2

同じ問題が発生し、デフォルトのプログラムを変更して.ps1ファイルをPowerShellで開くように修正しました。メモ帳に設定されました。


あなたはこれと同じ問題を抱えていましたか?または、.ps1ファイルをダブルクリックすると、PowerShellでスクリプトを実行する代わりに、メモ帳で開きますか?
ベーコン2014

-2

管理者としてPowershellGUIを実行してみてください


3
質問で述べたように、I am both a domain administrator and a local administrator。スクリプトはネットワーク共有に保存されている場合は昇格せずに実行できるため、PowerShellを昇格して実行しても違いはありません。
ベーコン2016年

-4

PowerShellウィンドウで以下の2つのコマンドを実行します

  1. Set-ExecutionPolicy無制限

  2. ブロック解除-ファイル-パスD:\ PowerShell \ Script.ps1


2
明らかに、この同じ適用できない解決策のバリエーションを提案する質問や他の何年も前の回答、またはこれは答えではないことを何度も述べている私のコメントを読んでいませんでした。できれば-10にしますが、代わりに-1で解決する必要があります。
ベーコン2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.