[powershell] PowerShell은 “이 시스템에서 스크립트 실행이 비활성화되어 있습니다”라고 말합니다.

나는 실행하려고합니다 를 호출하는 파일 에서 스크립트를 사용 cmd.exe하면 아래 오류가 발생합니다.

Management_Install.ps1 이 시스템에서 스크립트 실행이 비활성화되어로드 할 수 없습니다.

나는 달렸다

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

내가 달릴 때 Get-ExecutionPolicy 부터나는 Unrestricted돌아온다.

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1

WARNING: Running x86 PowerShell...

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1이 시스템에서 스크립트 실행이 비활성화되어 파일 을로드 할 수 없습니다. 자세한 내용은 ” get-help about_signing“를 참조하십시오.

줄 : 1 문자 : 25

  • .\Management_Install.ps1 <<<< 1

    • CategoryInfo : 지정되지 않음 : (:) [], PSSecurityException

    • FullyQualifiedErrorId : RuntimeException

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSE

Press any key to continue . . .

시스템은 Windows Server 2008R2입니다.

내가 무엇을 잘못하고 있지?



답변

Windows Server 2008 R2를 사용 하는 경우 x64x86 버전의 PowerShell이 ​​있으며 모두 실행 정책을 설정해야합니다. 두 호스트 모두에서 실행 정책을 설정 했습니까?

AS를 관리자 , 당신은 당신의 PowerShell 창에이를 입력하여 실행 정책을 설정할 수 있습니다 :

Set-ExecutionPolicy RemoteSigned

자세한 내용 은 Set-ExecutionPolicy Cmdlet 사용을 참조하십시오 .

완료되면 다음을 사용하여 정책을 기본값으로 다시 설정할 수 있습니다.

Set-ExecutionPolicy Restricted


답변

-ExecutionPolicy BypassPowerShell을 실행할 때 추가하여 단일 파일에 대해이 정책을 무시할 수 있습니다.

powershell -ExecutionPolicy Bypass -File script.ps1


답변

비슷한 문제가 있었고 Windows Server 2012 의 기본값 cmd 의 64 하나를 실행했다.

들어 윈도우 7 , 윈도우 8 , 윈도우 10 , 윈도우 서버 2008 R2 또는 윈도우 서버 2012 로 다음 명령을 실행 관리자 :

x86 (32 비트)
열기 C:\Windows\SysWOW64\cmd.exe
명령 실행powershell Set-ExecutionPolicy RemoteSigned

x64 (64 비트)
열기 C:\Windows\system32\cmd.exe
명령 실행powershell Set-ExecutionPolicy RemoteSigned

당신은 사용하여 모드를 확인할 수 있습니다

  • CMD에서 : echo %PROCESSOR_ARCHITECTURE%
  • Powershell에서 : [Environment]::Is64BitProcess

참조 :
MSDN-Windows PowerShell 실행 정책
Windows-32 비트 및 64 비트 디렉토리 설명


답변

기존 답변의 대부분은 방법을 설명 하지만 그 이유는 거의 설명하지 않습니다 . 인터넷에서 낯선 사람의 코드, 특히 보안 조치를 사용하지 않는 코드를 실행하기 전에 수행중인 작업을 정확하게 이해해야합니다. 이 문제에 대해 좀 더 자세히 설명하겠습니다.

TechNet 실행 정책 정보 페이지에서 :

Windows PowerShell 실행 정책을 통해 Windows PowerShell이 ​​구성 파일을로드하고 스크립트를 실행하는 조건을 결정할 수 있습니다.

PowerShell 기본 사항-실행 정책 및 코드 서명에 열거 된 이점 은 다음과 같습니다.

  • 실행 제어-스크립트 실행에 대한 신뢰 수준을 제어합니다.
  • 커맨드 하이 잭 -내 경로에 커맨드가 주입되지 않도록합니다.
  • ID- 내가 신뢰하는 개발자 및 / 또는 내가 신뢰하는 인증 기관의 인증서로 서명 한 스크립트입니다.
  • 무결성 -악성 코드 나 악의적 인 사용자가 스크립트를 수정할 수 없습니다.

현재 실행 정책을 확인하려면을 실행하십시오 Get-ExecutionPolicy. 그러나 당신은 아마 당신이 그것을 바꾸고 싶어하기 때문에 여기에있을 것입니다.

이를 위해 Set-ExecutionPolicycmdlet을 실행합니다 .

실행 정책을 업데이트 할 때 결정해야 할 두 가지 주요 결정이 있습니다.

실행 정책 유형 :

  • Restricted -시스템에서 로컬, 원격 또는 다운로드 된 스크립트를 실행할 수 없습니다.
  • AllSigned -실행 된 모든 스크립트는 디지털 서명이 필요합니다.
  • RemoteSigned -모든 원격 스크립트 (UNC) 또는 다운로드 된 서명이 필요합니다.
  • Unrestricted -모든 스크립트 유형에 대한 서명이 필요하지 않습니다.

새로운 변화의 범위

  • LocalMachine -실행 정책은 컴퓨터의 모든 사용자에게 영향을줍니다.
  • CurrentUser -실행 정책은 현재 사용자에게만 영향을줍니다.
  • Process -실행 정책은 현재 Windows PowerShell 프로세스에만 영향을줍니다.

† = 기본

예를 들어 CurrentUser에 대해서만 정책을 RemoteSigned로 변경하려면 다음 명령을 실행하십시오.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

참고 : 실행 정책을 변경하려면 PowerShell As Adminstrator를 실행해야합니다 . 일반 모드에 있고 실행 정책을 변경하려고하면 다음 오류가 발생합니다.

레지스트리 키 ‘HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell’에 대한 액세스가 거부되었습니다. 기본 (LocalMachine) 범위의 실행 정책을 변경하려면 “관리자 권한으로 실행”옵션을 사용하여 Windows PowerShell을 시작하십시오.

인터넷에서 다운로드되지 않은 (또는 최소한 UNC 메타 데이터를 포함하지 않은) 자체 스크립트에 대한 내부 제한을 강화하려는 경우 정책이 서명 된 스 릿트 만 실행하도록 할 수 있습니다. 자체 스크립트에 서명하려면 Scott Hanselman의 PowerShell 스크립트 서명 에 대한 지침을 따르십시오 .

참고 : 대부분의 사람들은 Powershell을 열 때마다 PS가 시작될 때 가장 먼저 시도하는 것이 환경을 설정하지만 원하는대로 설정하는 사용자 프로필 스크립트를 실행하기 때문에이 오류가 발생할 수 있습니다.

파일은 일반적으로 다음 위치에 있습니다.

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

powershell 변수를 실행하여 정확한 위치를 찾을 수 있습니다

$profile

프로필에 신경 쓰지 않고 보안 설정을 소홀히하고 싶지 않다면 보안 설정을 삭제하면 powershell이 ​​실행할 수없는 것을 찾지 않습니다.


답변

Windows 7에서 :

시작 메뉴로 이동하여 “Windows PowerShell ISE”를 검색하십시오.

x86 버전을 마우스 오른쪽 버튼으로 클릭하고 “관리자 권한으로 실행”을 선택하십시오.

상단에 붙여 넣기 Set-ExecutionPolicy RemoteSigned; 스크립트를 실행하십시오. “예”를 선택하십시오.

64 비트 버전의 Powershell ISE (비 x86 버전)에 대해서도이 단계를 반복하십시오.

@Chad Miller가 암시 한 단계를 명확하게 설명하고 있습니다. 감사합니다 차드!


답변

스크립트 전에이 명령을 실행하면 문제가 해결됩니다.

set-executionpolicy unrestricted


답변

관리자가 아닌 환경에있는 경우 사용자만을 위해 실행 정책을 설정할 수 있으며 관리자가 필요하지 않습니다.

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

또는

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

도움말 항목에서 모든 내용을 읽을 수 있습니다.

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full