로컬에서 만든 스크립트가 RemoteSigned 실행 정책에서 실행되지 않는 이유는 무엇입니까?


107

이 질문은 질문 본문에 의해 반박되거나 실제 문제를 다루지 않는 응답을 계속 끌어 들이기 때문에 알아야 할 사항에 대한 간단한 요약읽으십시오 .

  • 입니다 하지 는 "왜 PowerShell을 내 기본 설치가 실행되지 않습니다 스크립트?" 질문.
  • 입니다 하지 A가 "왜 PowerShell을 실행 스크립트 내 설치가 인터넷에서 다운로드하지?" 질문.
  • 문제는 RemoteSigned실행 정책이 스크립트 실행을 방해하지 않아야하는 이유입니다.
  • RemoteSigned는 IS 단지 내가 사용하고자하는 실행 정책. 덜 제한적인 다른 정책을 사용할 수 있다는 것을 알고 있습니다. 이러한 정책이 수용 가능한 대체물이라면 대신 사용했을 것이고이 질문은 존재하지 않을 것입니다.
  • 실행 정책이 이미로 설정되어 RemoteSigned있습니다. 에서 변경 RemoteSigned하는 것은 RemoteSigned해결책이 아니다.
  • 스크립트 파일이 생성되고 로컬에 저장됩니다.
  • 스크립트 파일은 차단되지 않습니다. 스크립트 파일이 차단되지 않았습니다 (이전 포인트 참조).
  • 차단을 해제 할 항목이 없기 때문에 스크립트 파일을 차단 해제 할 수 없습니다 (이전 포인트 참조).
  • 스크립트 파일은 관리자가 실행 (실행하려고 시도)합니다.
  • Windows PowerShell관련된 유일한 응용 프로그램입니다. 되지 Windows PowerShell ISECommand Prompt않고 다른 도구 나 편집자는 관련입니다.
  • 문제의 원인이 이미 확인되었습니다 (승인 된 답변 참조). 거의 8 년이 지난 후, 적용 가능 여부에 관계없이 다른 모든 명백한 설명도 게시되었다고 생각합니다. 그렇지 않다고 생각 되면 질문과 기존 답변 전체 를 읽고 추가하십시오.

64 비트 Windows 7 Professional에서 Windows PowerShell 2.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 -List, 나는 것을 볼 수 있습니다 Group Policy Object구성 PowerShell을하기 위해 만들어 내가 올바르게 적용되는 RemoteSigned시스템 수준에서 실행 정책을 :

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

나는에 스크립트 나 자신을 생성 Notepad하고, 사용 시스 인 터널 ' streams유틸리티와 파일 Properties스크립트가 인터넷에서 오는 것으로 처리하고 있지 않은지 확인하는 대화 상자를. 스크립트를 도메인 서버의 네트워크 공유에 복사하면 실행이 허용됩니다. 실행 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine하면 로컬 스크립트는 여전히 실행이 허용되지 않습니다. 이는 MachinePolicy범위 의 실행 정책 이 우선 하므로 의미 가 있습니다.

about_Execution_Policies( current ; at time of question ) 에서 문서화 한대로 RemoteSigned정책은 다음을 의미합니다.

  • 스크립트를 실행할 수 있습니다.

  • 인터넷에서 다운로드 한 스크립트 및 구성 파일 (전자 메일 및 인스턴트 메시징 프로그램 포함)에 대해 신뢰할 수있는 게시자의 디지털 서명이 필요합니다.

  • 실행 한 스크립트와 로컬 컴퓨터 (인터넷에서 다운로드하지 않음)에서 작성한 스크립트에 디지털 서명이 필요하지 않습니다.

  • 인터넷 이외의 소스에서 서명되지 않은 스크립트와 서명되었지만 악성 스크립트를 실행할 위험이 있습니다.

내 스크립트는 서명되지 않았지만 로컬에서 생성 및 실행되기 때문에 위의 세 번째 글 머리 기호를 충족해야합니다. 따라서...

  • 내 스크립트가 실행되지 않는 이유는 무엇입니까?
  • 해당 요구 사항이 인터넷의 파일에만 적용되어야하는데 PowerShell에서 내 스크립트가 "디지털 서명되지 않았습니다"라고 불평하는 이유는 무엇입니까?
  • PowerShell이 ​​네트워크 공유에서 실행될 때 더 이상 스크립트가 서명되지 않는 것에 대해 신경 쓰지 않는 이유는 무엇입니까?

1
@Downvoter : 이유를 알려주시겠습니까?
Lance U. Matthews

답변:


125

파일이 차단되고 있습니까? 나는 같은 문제가 있었고 .PS1 파일, 속성을 마우스 오른쪽 버튼으로 클릭하고 차단 해제를 선택하여 해결할 수있었습니다.


1
내가 설명했듯이 스크립트는 내 하드 드라이브에 직접 생성되고 (어디에서 다운로드되지 않음), 다른 영역 (Internet Explorer 및 기타 웹 브라우저 생성과 같은)에서 생성 된 것으로 식별하는 대체 스트림이 없음을 확인했습니다. 실행 'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;하면 스크립트가 디지털 서명되지 않았고 실행되지 않는다는 오류가 여전히 발생합니다. 새로 만든 파일의 속성 대화 상자를 열면 차단을 해제 할 항목이 없습니다.
Lance U. Matthews 2013

50
~ " 속성 및 차단 해제 "를 선택 한다는 것은 무슨 뜻 입니까?
IgorGanapolsky

1
@IgorGanapolsky는 탐색기에서 ps1파일을 마우스 오른쪽 버튼으로 클릭하여 상황에 맞는 메뉴를 불러 온 다음을 선택 Properties합니다. 아래의 첫 번째 탭에서 파일이 차단되었다고 표시하고 확인란을 선택하여 차단을 해제 할 수 있습니다.
user692942

1
zip 파일을 다운로드 한 경우 압축을 풀기 전에 zip 파일의 차단을 해제해야 그 안에있는 모든 파일이 대량 차단 해제되는 것을 방지 할 수 있습니다.
Ohad Schneider

15
@Lankymart Windows 10은 이것을 시도했지만 차단되었다고 말하지 않습니다.
Alan Baljeu

124

확인해야 할 사항 :

무제한으로 변경할 수 있습니까?

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 Unrestricted것과 사실상 동일합니다 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine. 예,에 대해 Turn on Script Execution정책이 활성화되었습니다 Computer Configuration. PowerShell로 열리 C:\Users\UserName므로 .\Desktop\Script.ps1프롬프트에서 실행 합니다. 절대 경로를 사용하면을 통해 스크립트를 호출하는 것과 동일한 오류가 발생 powershell.exe합니다.
Lance U. Matthews

그룹 정책 설정을 비활성화하고 새로 고침을 시도 했습니까 gpupdate /force? (다시 시작 PowerShell.exe를 후)
앤디 아리스 멘디

음, 오랫동안 스코프 Unrestricted에서 실행 중이 LocalMachine었지만 스크립트 작성을 시작했을 때 다른 컴퓨터에서 실행하고 싶었습니다. LocalMachine다시 설정 Undefined하고 현재 그룹 정책을 추가 RemoteSigned하여 MachinePolicy범위 에 설정 했습니다 . 이것은 일회성 테스트 스크립트이며 대신 네트워크에서 실행하는 것은 큰 문제 가 아닙니다. 로컬에서 작동하지 않는지 알고 싶습니다 . 결국 로컬에서 생성 된 스크립트는에서 실행되도록 허용되어야합니다 RemoteSigned. 내가 놓치고 있거나 이해하지 못하는 것이있을 것이라고 생각했습니다.
Lance U. Matthews

@BACON 바탕 화면에 메모장으로 RemoteSigned저장 Write-Host hi하는 것이 정확 합니다. 구성도 괜찮아 보이지만 ... 뭔가 문제가있는 것 같습니다 ... 이것이 도움이되는지 확인하기 위해 그룹 정책을 제거하도록 제안한 이유입니다.
Andy Arismendi 2012 년

1
개발을 위해 우리는 -executionpolicy bypass일시적으로 원격 서명 된 문제를 지나쳤으며 다른 문제 (관련되지 않았으므로 PowerShell을 업그레이드해야 함)를 발견하고 디버깅 할 수있었습니다.
Doug_Ivison

15

마침내 이것을 .NET Code Access Security 로 추적했습니다 . 네트워크 공유에 저장되고 실행되는 내부 개발 바이너리 모듈이 있습니다. .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 버전 및 Windows가 32 비트인지 64 비트인지 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를 수정 한 지 한참 지났는데 내 규칙이 권한 부여를 방해하는 것처럼 보이는 이유가 확실하지 않습니다.FullTrustMyComputer하지만, 이후 CAS .NET 4.0으로 사용되지 않습니다 (PowerShell을 3.0의 기반이되는), I 이제 논쟁의 여지가있는 것 같아요.


URL 규칙을 어떻게 추가 했습니까? 나는 같은 문제가 있었고 이것이 내가 그것을 해결하는 데 도움이되기를 바랍니다. 감사.
OptimusPrime

을 (를) 사용하여 작업 한 지 아주 오래 caspol.exe되었지만 실행 caspol.exe -machine -addgroup 1.2 -url file://Server/Share/Directory/WindowsPowerShell/Modules/* FullTrust후이 1.2.3.답변에서 볼 수 있는 것과 동일한 규칙을 얻었 습니다 . file://설명서에서 -addgroup 예제 중 하나가 UNC 경로를 사용하는 것을 볼 수 있지만 URL을 사용하여 SMB 공유의 디렉터리를 참조했습니다 .
Lance U. Matthews

12

Dropbox에 매핑 된 드라이브의 PS1 파일을 실행할 때 항상이 오류가 발생한다는 사실을 알게되었습니다. PS1의 속성을 열 때 "차단 해제"가 없습니다.

나를 위해 일하는 유일한 것은

powershell.exe -executionpolicy 우회 -file. \ Script.ps1


1
스크립트가 네트워크 공유에 매핑 된 드라이브에 저장되어 있습니까? 아니면 스크립트가 매핑 된 드라이브를 생성합니까? 전자가 질문의 본문과 제목에 명시되어있는 것처럼 스크립트가 로컬에 생성되고 저장되었으므로 스크립트의 출처 / 영역이 요인이되지 않습니다. 어느 쪽이든 Bypass실행 정책 사용은 이미 5 년 전과 최근 5 개월 전에 제안되었습니다 . 답변하기 전에 질문과 기존 답변을 읽으십시오.
Lance U. Matthews

6

파일이 네트워크 위치, 즉 다른 컴퓨터에서 복사 된 경우 Windows에서 해당 파일을 차단했을 수 있습니다. 파일을 마우스 오른쪽 버튼으로 클릭하고 차단 해제 버튼을 클릭하고 작동하는지 확인하십시오.


2
@ O-Dogg의 답변에 대한 질문과 내 의견에서 설명했듯이 스크립트는 내 하드 드라이브에서 직접 생성되고 (어디에서 다운로드되지 않음) 다른 영역에서 시작된 것으로 식별하는 대체 스트림이 없음을 확인했습니다. (Internet Explorer 및 기타 웹 브라우저가 생성하는 것처럼). 실행 'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;하면 스크립트가 디지털 서명되지 않았고 실행되지 않았다는 오류가 여전히 발생합니다. 새로 생성 된 파일의 속성 대화 상자를 열면 차단을 해제 할 항목이 없습니다.
Lance U. Matthews

매핑 된 드라이브에서 생성 및 실행하고 있지 않은지 확인할 가치가 있습니다. 예를 들어 서버에서 각 사용자의 홈 폴더는 개인 폴더에 매핑 된 드라이브입니다.
Caltor

1

.ps1 PowerShell 스크립트를 실행하면 ".ps1은 디지털 서명이 없습니다."라는 메시지가 표시 될 수 있습니다. 스크립트는 시스템에서 실행되지 않습니다. " 이 문제를 해결하려면 아래 명령을 실행하여 Set-ExecutionPolicy를 실행하고 실행 정책 설정을 변경해야합니다.

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

또 다른 대답은 이미 Bypass실행 정책 사용을 제안합니다 . 어쨌든 다른 정책을 사용하는 것은 도움이되지 않으며 RemoteSigned실제로 필요한 경우 실제 문제를 해결하지 못합니다 . 마지막으로, 참조하는 오류 메시지는 질문에서와 동일하지 않습니다.
Lance U. Matthews

0

이것은 IDE 문제입니다. PowerShell GUI에서 설정을 변경합니다. 도구 탭으로 이동하여 옵션을 선택한 다음 디버깅 옵션을 선택 합니다. 그런 다음 서명 할 스크립트에 대한 요구 사항 해제 확인란을 선택합니다 . 끝난.


OP는 스크립트가 서명되지 않은 상태로 실행되는 것을 원하지 않으며 IDE를 참조하지 않았습니다.
kfsone

1
Powershell ISE에서 사용할 수 없음
Josh Noe

0

나를 위해 작동하는 것은 .ps1 파일을 마우스 오른쪽 버튼으로 클릭 한 다음 속성을 클릭하는 것입니다. "UNBLOCK"버튼을 클릭합니다. 정책을 변경하려고 몇 시간을 보낸 후에는 잘 작동합니다.


1
질문에 명시된 것을 무시하고 동일한 적용 불가능한 해결책을 제안하는 두 가지 답변이 이미 있습니다. "나는 ... Sysinternals의 스트림 유틸리티와 파일 속성 대화 상자를 사용하여 스크립트가 인터넷에서 온 것으로 취급되지 않는지 확인했습니다"와 "로컬에서 생성 및 실행됩니다"라고 매우 명확하게 썼습니다. 제목에서 스크립트가 "로컬에서 생성 된 것"이라고 적혀 있습니다. 차단 해제 할 항목이 없습니다. 스크립트 차단을 해제하여 문제가 해결 되었다면 언급했듯이 스크립트가 차단되지 않았기 때문에 동일한 문제가 발생하지 않은 것입니다. -1.
Lance U. Matthews

1
@BACON 공평하게 말하면, 나는 당신과 같은 증상을 보였고 나를 위해 차단 해제가 작동했습니다. 내 스크립트가 로컬에서 생성되었다고 생각하더라도 저장 한 후에는 매번 차단을 해제해야 했습니다.
SQB

이 약하지만 어쩌면 전체 올바른 솔루션 작품이다
모 Zaatar

@SQB 궁금한 점이 있습니다. 로밍 프로필이 있습니까?
Robert Talada

0

script.bs1 파일을 백업하십시오.

나를 위해 작동하는 것은 script.bs1 파일을 삭제하고 실행 명령을 실행하는 것입니다.


1
이렇게하여 해결 된 오류 메시지는 무엇입니까?
Lance U. Matthews

이 오류를 두 번 겪었고 같은 방식으로 수정했습니다. CMD에서 실행 명령을 실행하면 이름은 같지만 확장명이 (.cmd) 인 다른 파일에서 즉시 실행되는 것처럼 보입니다.
Simple Abstraction

C : \ Users \ UserName \ Desktop \ Script.ps1 파일을로드 할 수 없습니다. C : \ Users \ UserName \ Desktop \ Script.ps1 파일은 디지털 서명되지 않았습니다. 스크립트는 시스템에서 실행되지 않습니다. ((Script.ps1 디지털 서명이 아님))
Simple Abstraction

내가 참조. 그리고 당신이 달릴 때 반환되는 것은 무엇 Get-ExecutionPolicy -List입니까?
Lance U. Matthews

MachinePolicy AllSigned, UserPolicy Undefined, Process Undefined, CurrentUser RemoteSigned, LocalMachine Bypass
단순 추상화

-1

Power shell 대신 터미널 명령 프롬프트를 선택하십시오. 작동합니다.


2
이것은 무엇을 의미합니까? 어디에서 선택 하시겠습니까? 목표는 PowerShell에서 PowerShell 스크립트를 실행하는 것이기 때문에 PowerShell 이외의 다른 것을 사용하면 작동하지 않습니다.
Lance U. Matthews

AWS Amplify CLI를 실행하는 동안 동일한 오류가 발생했습니다. PowerShell 대신 WIndows Terminal에서 amplify 명령을 실행하면 작동하는 것처럼 보였습니다.
symbiotech

-2

동일한 문제가 발생하여 .ps1 파일을 PowerShell로 열도록 기본 프로그램을 변경하여 문제를 해결했습니다. 메모장 으로 설정되었습니다 .


이 같은 문제가 있었습니까? 또는 .ps1PowerShell에서 스크립트를 실행하는 대신 메모장에서 열리는 파일을 두 번 클릭하면 ?
Lance U. Matthews

-2

Powershell GUI를 관리자로 실행 해보십시오.


3
질문에서 언급했듯이 I am both a domain administrator and a local administrator. PowerShell을 관리자 권한으로 실행해도 네트워크 공유에 저장 될 때 스크립트가 권한없이 실행되도록 허용되었으므로 차이가 없습니다.
Lance U. Matthews

-5

PowerShell 창에서 2 개의 명령 아래에서 실행

  1. Set-ExecutionPolicy 무제한

  2. 차단 해제 파일-경로 D : \ PowerShell \ Script.ps1


2
분명히 당신은이 같은 적용 할 수없는 해결책의 변형을 제안하는 질문이나 다른 몇 년 된 답변을 읽지 않았거나 이것이 답이 아니라고 반복해서 언급하는 내 의견을 읽지 않았습니다. 가능하다면 -10을하려고하지만 대신에 -1에 만족해야합니다.
Lance U. Matthews

@BACON Agreed.lol
로버트 Talada
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.