PowerShell 스크립트를 실행하는 방법은 무엇입니까?


260

PowerShell 스크립트를 실행하려고하면이 오류가 발생합니다.

이 시스템에서 스크립트 실행이 비활성화되어 있으므로 파일 C : \ Common \ Scripts \ hello.ps1을로드 할 수 없습니다. 자세한 내용은 "get-help about_signing"을 참조하십시오.
1 행 : char : 13
+. \ hello.ps1 <<<<
+ CategoryInfo : NotSpecified : (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException

답변:


399
  1. "관리자 권한으로 실행"옵션을 사용하여 Windows PowerShell을 시작하십시오. 컴퓨터의 Administrators 그룹 구성원 만 실행 정책을 변경할 수 있습니다.

  2. 다음을 입력하여 서명되지 않은 스크립트 실행을 활성화하십시오.

    set-executionpolicy remotesigned
    

이를 통해 로컬 컴퓨터에서 작성하는 서명되지 않은 스크립트와 인터넷에서 서명 된 스크립트를 실행할 수 있습니다.

Microsoft TechNet 라이브러리에서 스크립트 실행을 참조하십시오 .


3
정책이 영구적으로 변경됩니까? 아니면 컴퓨터를 다시 시작할 때마다 변경해야합니까?
Ray

1
@Ray 정책을 영구적으로 변경합니다.
Pavel Chuchuva

1
@Ray 설명서를 참조하십시오 . 기본적으로로 설정되어 LocalMachine있습니다. 다른 범위 ( CurrentUser또는 Process) 를 설정하려면 -Scope명시 적으로 전달하십시오 .
jpmc26

@PavelChuchuva이 줄을 여러분이 의도 한 스크립트 위에 추가해야합니다
FabioSpaghetti

@FabioSpaghetti 스크립트에 아무것도 추가 할 필요가 없습니다. 다음 단계에 따라 해당 명령을 한 번만 실행하십시오.
Pavel Chuchuva

74

기본 실행 정책이 제한으로 설정되어 있습니다. 다음을 입력하여 볼 수 있습니다.

Get-ExecutionPolicy

무제한 모드로 전환하려면 다음을 입력해야합니다.

Set-ExecutionPolicy unrestricted

도움이 되었기를 바랍니다


13
사용자가 인터넷에서 악성 스크립트를 복사하여 붙여 넣기를 기대하는 경우 서명이 필요합니다. 사용자가 어리석지 않다고 가정하면 "원격 서명"은 보안을 추가하지 않으며 삶을 어렵게 만듭니다.
거스

@Guss : 이것을 테스트 할 때 RemoteSigned에서 더 이상 로컬로 생성 된 .ps1 파일을 서명 할 필요가 없으며 git 소스 컨트롤을 로컬 소스로 취급합니다.
여호수아

@Joshua-예, 내 요점은 정확히입니다. 경우 RemoteSigned복사 및 붙여 넣기를 차단하지 않습니다, 자식 또는 다른 비 IE 다운로드 방법을 차단하지 않습니다, 그것은 좋은 무엇인가? 나와 함께 말해봐 : "절대적으로 아무것도!" 100 달러짜리 코드 서명 인증서로 스크립트를 서명해야한다는 것은 쓸모없고 어리 석고 Windows 용으로 적절한 스크립트 언어가 할 수있는 모든 장점을 무효화한다고 생각합니다. 앞으로 방법은 그들이 PS 스크립트를 사용하기 위해 무슨 일을하는지 이해하는 사용자를 얻을 수있는 경우 즉, 말했다되고, 우리는 ;-) 작동하지 않을 것, Nahhhh ... 너무 STH에있을 수 있습니다
구스

@ Guss : Windows에서 이미 좋은 스크립팅 언어를 얻었습니다. Cygwin은 Windows 10에서 훌륭하게 작동합니다. 이전 버전의 Windows보다 문자 그대로 훨씬 낫습니다. 다른 사람이 이미 쓴 스크립팅 만 실행하고 싶습니다.
여호수아

61

스크립트를 개발하는 데 사용하는 컴퓨터에서는 위와 같이 -unrestricted를 사용합니다. 그러나 최종 사용자 컴퓨터에 스크립트를 배포 할 때는 -executionpolicy 스위치를 사용하여 powershell을 호출하면됩니다.

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1

2
이 트릭을 .CMD 파일의 폴리 글 로트 트릭과 결합 할 수 있습니다. stackoverflow.com/a/8597794/5314
Jay Bazuzi

좋은! 나는 SFX의이 WinRAR과에 의해 배포했습니다 rarlabs.com
MDMoore313

1
그 트릭은 저 망할 놈의 배쉬 (MINGW32 강타)에서 PowerShell 스크립트를 실행하도록 허용
카밀 Szot

16

아래 명령으로 현재 ExecutionPolicy의 상태를 확인할 수 있습니다.

Get-ExecutionPolicy;

기본적으로 Restricted 입니다. PowerShell 스크립트를 실행하려면이 ExecutionPolicy를 Bypass 또는 Unrestricted 로 설정해야합니다 .

아래 PowerShell 명령 중 하나를 사용 Bypass하거나 Unrestricted사용하여 현재 사용자에 대한 정책을 설정할 수 있습니다 .

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

무제한 정책은 모든 구성 파일을로드하고 모든 스크립트를 실행합니다. 인터넷에서 다운로드 한 서명되지 않은 스크립트를 실행하면 실행하기 전에 권한을 묻는 메시지가 표시됩니다.

있는 반면 바이 패스 정책, 아무것도 차단되지 및 스크립트 실행시에는 경고 또는 프롬프트가 없습니다. 바이 패스 실행 정책이 무제한보다 완화되었습니다.


5

Windows 버전 및 구성에 따라 Unrestricted모드 에서도 다음과 같은 경고가 표시 될 수 있습니다 .

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")

해결책은 다음 명령으로 활성화 된 "바이 패스"정책을 사용하는 것입니다.

Set-ExecutionPolicy Bypass

로부터 문서 :

우회 : 아무것도 차단되지 않으며 경고 나 프롬프트가 없습니다.

이것은 분명히 안전하지 않으므로 관련된 위험을 이해하십시오.


이것이 powershell 2.0을 사용하여 WINE 환경에서 스크립트를 실행할 수있는 유일한 방법이었습니다. 감사합니다.
Wyatt8740

@ Wyatt8740 : 와인은 모든 드라이브를 네트워크 드라이브로 제공하기 때문입니다.
여호수아

@Joshua 나는 몰랐다. 그 진술의 출처를 알려주시겠습니까? 나는 캐주얼 한 구글을 시도했지만 분명히 틀렸다.
Wyatt8740

@ Wyatt8740 : 출처 : Wine OpenFileName 공통 대화 상자. 드라이브 아이콘을보십시오.
조슈아

@Joshua 나는 소스 코드 소스를 의미했다. 아이콘은 임의적 일 수 있습니다. 그러나 나는 그런 생각을하지 않았다. 나는 시작하기에 좋은 장소 같아요 : (편집 그들이 여기처럼 보이지 않습니다 .)
Wyatt8740

2

다음과 같은 등록 키 :
Windows 레지스트리 편집기 버전 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows \ PowerShell] "EnableScripts"= dword : 00000001 "ExecutionPolicy"= "바이 패스"

과:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

실제로 작동합니다.


1

어떤 이유로 PowerShell cmdlet은 로컬 사용자 컨텍스트에 대해서만 로컬로 로컬 실행을 활성화하지 않았습니다. 예를 들어 자체 사용자 컨텍스트에서 실행되는 CygWin의 bash 프롬프트에서 Powershell 스크립트를 시작하려고하면 실행되지 않아 "디지털 서명되지 않았습니다"라는 오류가 발생합니다. 대답은 로컬 그룹 정책 편집기-> 로컬 컴퓨터 정책-> 관리 템플릿-> Windows 구성 요소-> Windows PowerShell로 이동하여 '스크립트 실행 켜기'를 두 번 클릭하는 것이 었습니다. 그런 다음 '사용 가능'으로 변경 한 다음 "로컬 스크립트 및 원격 서명 된 스크립트 허용"의 실행 정책을 작성하고 사용자 컨텍스트에 관계없이 전체적으로 작동하게합니다.


0

정답은 맞지만 정책 수정은 현재 실행중인 Powershell 인스턴스에서만 사용할 수 있습니다. 즉, Powershell 인스턴스가 종료되면 의미합니다. 정책이 재설정됩니다. 사용자가 다른 Powershell 인스턴스를 다시 열면 기본 정책이 적용됩니다.Restricted

나를 위해 cygwin의 VisualStudio Code 콘솔과 g ++를 사용하여 물건을 만들어야합니다. 콘솔이 기본 정책으로 Powershell을 사용하고 있으며 아무것도 수행 할 수 없습니다. 한 가지 솔루션은 VisualStudio Code 콘솔에서 콘솔이 실행될 때마다 정책을 변경하는 스크립트 일 수 있습니다.

나는 게으르다. 또 다른 해결책은 Powershell을 관리자 모드에서 실행할 때 허용되는 답변과 비슷한 방법입니다. 레지스트리 테이블의 값을 변경하는 추가 매개 변수가 있습니다. 완료되면. Powershell의 다른 인스턴스는 RemoteSigned기본적으로 정책을 사용합니다 .

set-executionpolicy remotesigned -Scope CurrentUser


0

정책을 올바르게 설정하는 것이 최선의 선택이지만 관리되는 시스템에서는 해당 정책을 변경할 수 없습니다.

저에게있어 가장 간단한 정책 변경 방법은 "PowerShell ISE" 에서 스크립트를 열고 실행할 코드 (또는 코드의 일부)를 강조 표시 한 다음 "선택 실행"단추를 클릭하거나 F8 키를 사용하는 것입니다. 지름길).

이것은 최상의 솔루션이 아니며 작업 자동화에는 거의 도움이되지 않지만 IS 부서를 어 기지 않으면 서 PowerShell의 사용 및 유틸리티를 허용합니다.


-2

reg 키가 작동하는 이유는 PS 명령이 수행하는 작업을 정확하게 수행하기 때문입니다. 명령은 변경 사항을 reg 키에 씁니다. reg 키를 작성하거나 레지스트리를 파는 것보다 명령이 훨씬 빠르고 쉽습니다.


1
다른 답변에서 언급 된 키는 powershells 실행 정책을 변경하여 powershell 스크립트를 실행할 수있게합니다.
Patrick R.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.