내 PowerShell 스크립트가 실행되지 않는 이유는 무엇입니까?


103

간단한 배치 파일을 PowerShell 스크립트로 작성했는데 실행시 오류가 발생합니다.

내 경로의 스크립트 디렉토리에 있습니다. 이것은 내가 얻는 오류입니다.

이 시스템에서 스크립트 실행이 비활성화되어 있으므로로드 할 수 없습니다. "서명에 대한 도움말 얻기"를 참조하십시오.

도움말을 살펴 봤지만 도움이되지 않았습니다.

답변:


102

PowerShell의 기본 보안 수준 일 수 있으며 (IIRC)는 서명 된 스크립트 만 실행합니다.

다음을 입력 해보십시오.

set-executionpolicy remotesigned

그러면 PowerShell에 로컬 (즉, 로컬 드라이브에서) 서명되지 않은 스크립트를 실행할 수 있습니다.

그런 다음 스크립트를 다시 실행하십시오.


5
최소한 Windows 8에서는 관리자 권한으로 Powershell을 실행해야합니다!
ComFreek

1
또한 Windows 7에서도 관리자 권한으로 PowerShell 스크립트를 실행해야합니다.
Rod

14
이것은 상당히 무서운 대답입니다. 첫째 , Powershell의 기본 보안 수준을 바람직하지 않고 안전하지 않은 방식 으로 영구적으로 변경합니다. 또 다른 경우에는 서명 된 원격 스크립트와 서명되지 않은 로컬 스크립트 ( Chocolyy에서 가끔 필요로 하는 서명 되지 않은 원격 스크립트가 아님)에 실행 권한이 부여 된다는 것을 적절하게 설명 하지 못합니다 . 대부분의 사용자는 아마 원하는 대신합니다.
Cecil Curry

1
답변의 약점에 대한 Cecil의 우려는 공정하지만 몇 가지를 지적하고 싶었습니다. 1) 그의 두 링크는 ​​나에게 동일한 페이지를 여는 것처럼 보입니다. 2) 스크립트를 단순히 실행하려면 실행 정책을 설정하는 것이 아마도 여전히 갈 길이며 OP와 관련이 없을 수도 있습니다 .3) 시작 스크립트에 대한 최상의 정책 인 것 같습니다. 명령 줄에서 실행 정책과 범위를 지정합니다. 스크립트를 실행하고 로그온을 위해 필요에 따라 세션 구성을 설정합니다. Windows 세션 동안 높은 수준의 보안을 원하지만 로그온을 줄이려면 스크립트 순서에서 미묘한 차이를 원할 것입니다.
omJohn8372

원샷 경우 실행중인 PowerShell 인스턴스에 대한 임시 예외를 정의하는 Ankur의 답변 이 가장 도움이됩니다.
Florenz Kley 2018

79

다음을 실행해야합니다 Set-ExecutionPolicy.

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

3
Windows에서 새 설치를 설정하는 기본 ExecutionPolicy 값은 무엇입니까?
Matthew Lock

5
@MatthewLock Restricted이 기본 정책입니다. Read More
Nadeem_MK

24

사용하다:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

현재 세션에서 PowerShell을 실행하려면 항상 위의 명령을 사용하십시오.


this + superuser.com/questions/612409/… + 바로 가기 링크 = 완벽
Q20

16

다음과 같이 PowerShell을 호출하여이 오류를 우회 할 수있었습니다.

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

즉, 나는 -executionpolicy bypass , 스크립트를 호출하는 방식에을 .

이것은 Windows 7 서비스 팩 1에서 작동했습니다. 저는 PowerShell을 처음 사용하기 때문에 알지 못하는주의 사항이있을 수 있습니다.

[2017-06-26 편집] Windows 10, Windows 2012 R2 등 다른 시스템에서도이 기법을 문제없이 계속 사용하고 있습니다.

지금 내가 사용하고있는 것은 다음과 같습니다 이렇게하면 스크립트를 클릭하여 실수로 스크립트를 실행할 수 없습니다. 스케줄러에서 실행할 때 "scheduler"라는 인수를 추가하면 프롬프트를 우회합니다.

또한 마지막에 창을 일시 중지하여 PowerShell의 출력을 볼 수 있습니다.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%

이것이 chocolateychocolatey 를 다운로드하고 설치하는 데 사용하는 것입니다.
icc97

Set-ExecutionPolicy bypass -File C : \ Users \ david \ Desktop \ test.ps1 명령을 실행하려고했는데 오류 메시지가 표시되었습니다. 이 명령에는 -File 옵션이 없습니다.
David Spector

아, 알겠습니다. powershell -executionpolicy bypass -File C : \ Users \ david \ Desktop \ test.ps1 명령을 포함하는 바로 가기를 만들어야합니다. 그런 다음 안전한 전역 명령 Set-ExecutionPolicy Restricted가 제공된 경우에도 test.ps1 명령이 실행됩니다. 이 기본 정보가 누군가에게 도움이되기를 바랍니다.
데이비드 스펙터

5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

위의 명령은 다음 오류가 발생하더라도 저에게 효과적이었습니다.

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

5

또한 .\스크립트 이름 앞에 포함해야 할 수도 있음을 아는 것이 좋습니다 . 예를 들면 :

.\scriptname.ps1

1

이 명령 set-executionpolicy unrestricted을 사용하면 작성한 모든 스크립트가 로그인 한 사용자로 실행됩니다. set-executionpolicy signed로그 아웃하기 전에 명령을 사용하여 실행 정책 설정을 다시 서명으로 설정해야합니다 .


set-executionpolicy signed제공 Cannot bind parameter 'ExecutionPolicy'
JinSnow

0

Windows 10의 경우 : myfile.ps1의 보안 속성 변경을 클릭하고 myfile.ps1의 속성을 마우스 오른쪽 버튼으로 클릭하여 "액세스 허용"을 변경합니다.

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