PowerShell กล่าวว่า“ การทำงานของสคริปต์ถูกปิดใช้งานในระบบนี้”


1760

ฉันกำลังพยายามเรียกใช้ ไฟล์ที่เรียกใช้ สคริปต์จาก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: NotSpecified: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

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

Press any key to continue . . .

ระบบนี้เป็น Windows Server 2008R2

ผมทำอะไรผิดหรือเปล่า?


3
ไม่ดูเพื่อนฉันเข้าสู่ระบบในฐานะผู้ดูแลและยังได้ทำงานเป็น "ผู้ดูแลระบบ" และได้ผลเช่นเดียวกับข้างต้น ...
Conor

2
ที่ด้านล่างของข้อผิดพลาดทำให้เข้าใจผิดปัญหาอยู่ในสคริปต์ PowerShell ของฉันขอบคุณ!
Conor

มันมีค่าชี้ให้เห็นว่านโยบายการดำเนินการมีขอบเขตหลายอย่างและการใช้ PowerShell ด้วยวิธีที่แตกต่างกันจะทำให้คุณได้รับนโยบายที่แตกต่าง Get-ExecutionPolicy -Listหากต้องการดูรายการนโยบายที่เรียกใช้
เบคอน Bits

คำตอบ:


2240

หากคุณใช้Windows Server 2008 R2 แสดงว่าPowerShell รุ่นx64และx86ทั้งสองนี้ต้องมีนโยบายการดำเนินการ คุณตั้งค่านโยบายการดำเนินการกับโฮสต์ทั้งสองหรือไม่

ในฐานะผู้ดูแลระบบคุณสามารถตั้งค่านโยบายการดำเนินการได้โดยพิมพ์ลงในหน้าต่าง PowerShell ของคุณ:

Set-ExecutionPolicy RemoteSigned

สำหรับข้อมูลเพิ่มเติมโปรดดูที่การใช้ Set-ExecutionPolicy Cmdlet

เมื่อเสร็จแล้วคุณสามารถกำหนดนโยบายกลับเป็นค่าเริ่มต้นด้วย:

Set-ExecutionPolicy Restricted

141
Set-ExecutionPolicy Restrictedน่าจะเป็นวิธีการที่จะยกเลิกได้ถ้าคุณต้องการที่จะนำสิทธิ์กลับไปเป็นพวกเขา: technet.microsoft.com/en-us/library/ee176961.aspx วิธีบายพาสชั่วคราวโดย@Jack Edmondsดูปลอดภัยกว่าสำหรับฉัน:powershell -ExecutionPolicy ByPass -File script.ps1
SharpC

33
สำหรับนโยบายที่ปลอดภัยยิ่งขึ้นให้กำหนดขอบเขตให้กับผู้ใช้จริง: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Nuno Aniceto

Set-ExecutionPolicy RemoteSigned ไม่สามารถเป็นบรรทัดแรกในสคริปต์ของคุณ ถ้าเป็นเช่นนั้นให้ไฮไลต์แล้วเรียกใช้ที่เลือกเท่านั้นเริ่มต้นก่อนที่จะเรียกใช้สคริปต์ที่เหลือของคุณ
ozzy432836

ฉันเจอคำถามที่คล้ายกันในเว็บไซต์ SF "นโยบายการดำเนินการ Powershell ภายใน SQL Server"ถาม 10 ตุลาคม 14 คำตอบที่มีรวมอยู่Get-ExecutionPolicy -Listซึ่งช่วยให้ฉันเห็นขอบเขตที่แตกต่างกัน cmd Get-ExecutionPolicyไม่แสดงขอบเขตทั้งหมด Import-Module SQLPSตอนนี้ทำงานกับ นโยบายการเปลี่ยนแปลงดังนี้{Undefined- Process,MachinePolicy,UserPolicy,}; {RemoteSigned- CurrentUser, LocalMachine}.
SherlockSpreadsheets

หากฉันทำสิ่งนี้การเปลี่ยนแปลงจะคงอยู่ในระยะเวลาของ PowerShell ปัจจุบันเท่านั้นหรือไม่ หรือใหญ่กว่านั้นเหรอ?
วิลเลียม Jockusch

709

คุณสามารถข้ามนโยบายนี้สำหรับไฟล์เดียวได้โดยเพิ่ม-ExecutionPolicy Bypassเมื่อเรียกใช้ PowerShell

powershell -ExecutionPolicy Bypass -File script.ps1

3
สิ่งนี้มีประโยชน์มากหากคุณใช้บัญชีที่ไม่ใช่ผู้ดูแลระบบ ฉันทำทางลัดไป%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPassที่แถบงานของฉัน
zek19

3
โปรดทราบว่า Microsoft Technet จัดเป็น "บายพาส" ไม่ใช่ "ByPass" ดู: technet.microsoft.com/nl-nl/library/hh849812.aspx
Jelle Geerts

1
สิ่งนี้ใช้ไม่ได้สำหรับฉันฉันได้รับการอนุญาตแบบเดียวกันถูกปฏิเสธราวกับว่าฉันเรียกมันตามปกติ การเรียก ps1 จาก. bat ด้วยการtype script.ps1 | powershell -ทำงานนั้นใช้งานได้
Some_Guy

8
วัตถุประสงค์ของนโยบายการดำเนินการคือการป้องกันไม่ให้ผู้คนคลิกสองครั้ง.ps1และทำงานโดยไม่ตั้งใจ สิ่งนี้จะเกิดขึ้นกับ.batไฟล์
Kolob Canyon

คุณบันทึกวันของฉันขอบคุณสำหรับคำตอบ
Arpit Patel

162

ฉันมีปัญหาที่คล้ายกันและตั้งข้อสังเกตว่าค่าเริ่มต้นcmdในWindows Server 2012นั้นใช้งาน x64 อยู่

สำหรับWindows 7 , Windows 8 , Windows 10 , Windows Server 2008 R2หรือWindows Server 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%
  • ในพาวเวอร์เชล: [Environment]::Is64BitProcess

ข้อมูลอ้างอิง:
MSDN - นโยบายการดำเนินการ Windows PowerShell
Windows - คำอธิบายไดเรกทอรี 32 บิตเทียบกับ 64 บิต


133

ส่วนใหญ่ของคำตอบที่มีอยู่อธิบายวิธีแต่น้อยมากอธิบายทำไม และก่อนที่คุณจะเรียกใช้โค้ดจากคนแปลกหน้าบนอินเทอร์เน็ตโดยเฉพาะโค้ดที่ปิดใช้งานมาตรการรักษาความปลอดภัยคุณควรเข้าใจว่าคุณกำลังทำอะไรอยู่ ดังนั้นนี่คือรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับปัญหานี้

จากหน้า TechNet เกี่ยวกับนโยบายการดำเนินการ :

นโยบายการดำเนินการ Windows PowerShell ช่วยให้คุณกำหนดเงื่อนไขภายใต้ Windows PowerShell ที่โหลดไฟล์การกำหนดค่าและเรียกใช้สคริปต์

ประโยชน์ที่จะได้รับจากการใช้ข้อมูลพื้นฐานของ PowerShell - นโยบายการดำเนินการและการลงนามรหัสคือ:

  • การควบคุมการดำเนินการ - ควบคุมระดับของความไว้วางใจสำหรับการดำเนินการสคริปต์
  • Command Highjack - ป้องกันการฉีดคำสั่งในเส้นทางของฉัน
  • ข้อมูลประจำตัว - เป็นสคริปต์ที่สร้างและลงนามโดยนักพัฒนาที่ฉันเชื่อถือและ / หรือลงชื่อด้วยใบรับรองจาก Certificate Authority ที่ฉันเชื่อถือ
  • Integrity - สคริปต์ไม่สามารถแก้ไขได้โดยมัลแวร์หรือผู้ใช้ที่เป็นอันตราย

Get-ExecutionPolicyในการตรวจสอบนโยบายการดำเนินการปัจจุบันของคุณคุณสามารถเรียกใช้ แต่คุณอาจจะอยู่ที่นี่เพราะคุณต้องการเปลี่ยน

ในการทำเช่นนั้นคุณจะต้องเรียกใช้Set-ExecutionPolicycmdlet

คุณจะต้องตัดสินใจสองเรื่องสำคัญเมื่อทำการอัปเดตนโยบายการดำเนินการ

ประเภทนโยบายการดำเนินการ:

  • Restricted - ไม่สามารถเรียกใช้สคริปต์ได้ทั้งในท้องถิ่นระยะไกลหรือดาวน์โหลดบนระบบ
  • AllSigned - สคริปต์ทั้งหมดที่ทำงานต้องมีการเซ็นชื่อแบบดิจิทัล
  • RemoteSigned - สคริปต์ระยะไกล (UNC) หรือดาวน์โหลดทั้งหมดจะต้องลงชื่อ
  • Unrestricted - ไม่จำเป็นต้องมีลายเซ็นสำหรับสคริปต์ชนิดใด ๆ

ขอบเขตของการเปลี่ยนแปลงใหม่

  • LocalMachine - นโยบายการดำเนินการส่งผลกระทบต่อผู้ใช้คอมพิวเตอร์ทุกคน
  • CurrentUser - นโยบายการดำเนินการมีผลกับผู้ใช้ปัจจุบันเท่านั้น
  • Process - นโยบายการดำเนินการมีผลกับกระบวนการ Windows PowerShell ปัจจุบันเท่านั้น

† = ค่าเริ่มต้น

ตัวอย่างเช่น : หากคุณต้องการเปลี่ยนนโยบายเป็น RemoteSigned เพียงแค่ CurrentUser คุณจะเรียกใช้คำสั่งต่อไปนี้:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

หมายเหตุ : ในการเปลี่ยนนโยบายการดำเนินการคุณต้องใช้งานPowerShell ในฐานะผู้ดูแลระบบ หากคุณอยู่ในโหมดปกติและลองเปลี่ยนนโยบายการดำเนินการคุณจะได้รับข้อผิดพลาดต่อไปนี้:

การเข้าถึงคีย์รีจิสทรี 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell' ถูกปฏิเสธ หากต้องการเปลี่ยนนโยบายการดำเนินการสำหรับขอบเขตเริ่มต้น (LocalMachine) ให้เริ่ม Windows PowerShell ด้วยตัวเลือก "Run as administrator"

หากคุณต้องการกระชับข้อ จำกัด ภายในของสคริปต์ของคุณเองซึ่งไม่ได้ดาวน์โหลดจากอินเทอร์เน็ต (หรืออย่างน้อยก็ไม่มีข้อมูลเมตาของ UNC) คุณสามารถบังคับใช้นโยบายเพื่อเรียกใช้ sript ที่ลงนามแล้วเท่านั้น หากต้องการลงสคริปต์ของคุณเองคุณสามารถปฏิบัติตามคำแนะนำในบทความของสกอตต์ Hanselman ในการลงนามในสคริป PowerShell

หมายเหตุ : คนส่วนใหญ่มีแนวโน้มที่จะได้รับข้อผิดพลาดนี้ทุกครั้งที่เปิด Powershell เพราะสิ่งแรกที่ PS พยายามทำเมื่อเปิดตัวคือรันสคริปต์โปรไฟล์ผู้ใช้ที่ตั้งค่าสภาพแวดล้อมของคุณตามที่คุณต้องการ

โดยทั่วไปไฟล์จะอยู่ใน:

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

คุณสามารถค้นหาตำแหน่งที่แน่นอนโดยใช้ตัวแปร PowerShell

$profile

หากไม่มีสิ่งใดที่คุณสนใจในโปรไฟล์และไม่ต้องการยุ่งกับการตั้งค่าความปลอดภัยของคุณคุณสามารถลบได้เลยและ PowerShell จะไม่พบสิ่งที่ไม่สามารถดำเนินการได้


8
ฉันรู้สึกว่ามันเป็นสิ่งสำคัญที่จะต้องทราบว่าในขณะที่นโยบายการดำเนินการเป็นมาตรการรักษาความปลอดภัยไม่ใช่สิ่งหนึ่งที่มีไว้เพื่อป้องกันผู้ใช้จากการเรียกใช้รหัส PowerShell นโยบายการดำเนินการเป็นสิ่งที่มีไว้เพื่อปกป้องสคริปต์ของคุณและพิจารณาว่าใครเป็นผู้เขียนแก้ไขหรืออนุมัติพวกเขาและนั่นคือทั้งหมด มันเป็นเรื่องเล็ก ๆ น้อย ๆ ที่จะได้รับรอบนโยบายการดำเนินการGet-Content .\MyFile.ps1 | powershell.exe -NoProfile -กับสิ่งที่ง่ายเป็น
เบคอน Bits

1
เมื่อพิจารณาถึงการมีอยู่ของ-ExecutionPolicy ByPassนโยบายนี้มีจุดประสงค์อะไร? เป็นการป้องกันผู้ใช้จากการเปิดคอนโซล PowerShell โดยไม่ตั้งใจและเรียกใช้สคริปต์ที่เป็นอันตรายหรือไม่? ผู้โจมตีไม่สามารถใช้ไฟล์เรียกทำงานหรือสคริปต์ชุดทำงานได้หากพวกเขาต้องการหลีกเลี่ยงปัญหานี้หรือไม่? แม้หลังจากอ่าน @BaconBits ความคิดเห็นฉันไม่แน่ใจว่าสถานการณ์นี้นโยบายนี้มีวัตถุประสงค์เพื่อป้องกัน ...
Ajedi32

2
@ Ajedi32 บอกว่าฉันมีงานที่เรียกใช้สคริปต์บนเครือข่ายที่ใช้ร่วมกัน เมื่อฉันเรียกใช้สคริปต์ของฉันฉันต้องการให้กระบวนการของฉันเพื่อตรวจสอบว่ามีการเซ็นสคริปต์ ฉันต้องการให้รหัสของฉันตรวจสอบอีกครั้งว่าสคริปต์ที่ฉันจะเรียกใช้คือรหัสที่ฉันไว้วางใจให้ทำงาน ฉันไม่สนใจว่าคุณสามารถเรียกใช้รหัสของฉัน การหยุดนั่นคืองานสิทธิ์ในการเข้าถึง ฉันแค่ต้องการป้องกันคุณจากการทำให้ฉันเรียกใช้รหัสที่ฉันไม่ได้เขียน สิทธิ์การเข้าถึงหมายถึงระบบปฏิบัติการป้องกันไม่ให้คุณแก้ไขรหัสของฉันเมื่อคุณเข้าสู่ระบบ นโยบายการเซ็นชื่อรหัสและการดำเนินการหมายความว่าสคริปต์ของฉันไม่ได้รับการแก้ไขเมื่อฉันไปเรียกใช้
เบคอน Bits

40

ใน Windows 7:

ไปที่เมนู Start แล้วค้นหา "Windows PowerShell ISE"

คลิกขวาที่รุ่น x86 แล้วเลือก "Run as administrator"

ในส่วนบนวางSet-ExecutionPolicy RemoteSigned; เรียกใช้สคริปต์ เลือก "ใช่"

ทำซ้ำขั้นตอนเหล่านี้สำหรับ Powershell ISE รุ่น 64 บิตเช่นกัน (ไม่ใช่รุ่น x86)

ฉันแค่อธิบายขั้นตอนที่ @Chad Miller บอกเป็นนัย ขอบคุณแช้ด!


39

การรันคำสั่งนี้ด้วยก่อนที่สคริปต์จะแก้ปัญหาด้วย:

set-executionpolicy unrestricted

27
-1 - ปฏิบัติตามหลักการอนุญาตอย่างน้อยที่สุด อย่างน้อยตั้งค่านโยบายเป็นRemoteSignedก่อนที่จะลบข้อ จำกัด ทั้งหมดในนโยบายความปลอดภัยของคุณ หากวิธีนี้ใช้ไม่ได้ผลให้ประเมินความเจ็บปวดของคุณใหม่อีกครั้งและทำไมจึงไม่ทำงาน คุณสามารถตั้งunrestrictedเป็นทางเลือกสุดท้าย แต่ไม่ควรเป็นจุดเริ่มต้นของคุณ
KyleMit

3
ขอบคุณสำหรับการชี้ให้เห็นตัวเลือกนี้ด้วย ด้วยความเคารพอย่างสูงต่อความต้องการด้านความปลอดภัยสำหรับวัตถุประสงค์ในการผลิตในช่วงเวลาที่ความต้องการความสามารถในการสร้างต้นแบบอย่างรวดเร็วสูงมากนโยบายและความปลอดภัยทั้งหมดได้รับในทางที่จะทำสิ่งต่างๆ
tishma

1
เกี่ยวกับการสร้างต้นแบบความคิดเห็นฉันกลัวว่านี่คือสาเหตุที่รหัสเส็งเคร็งได้รับการผลิต แน่นอนว่านี่เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ แต่ถ้าคุณไม่สามารถแก้ปัญหานี้ได้เล็กน้อยในระหว่างการพัฒนา นอกจากนี้สำหรับรหัส bespoke และถ้าคุณสามารถรู้สภาพแวดล้อมเป้าหมาย - Remotesignedเราตั้งส่วนใหญ่ของระบบภายในของเราเป็น
Trix

33

หากคุณอยู่ในสภาพแวดล้อมที่ไม่ได้เป็นผู้ดูแลระบบคุณสามารถตั้งค่านโยบายการดำเนินการสำหรับคุณโดยเฉพาะและจะไม่ต้องการผู้ดูแลระบบ

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

หรือ

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

คุณสามารถอ่านทั้งหมดได้ในรายการความช่วยเหลือ

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

ทำงานได้ดีสำหรับฉันใน Windows 8 แม้ว่าSet-ExecutionPolicy Unrestrictedในฐานะผู้ดูแลระบบจะไม่ "จำกัด " พอที่จะช่วยได้จริง
patridge

1
ฉันเชื่อว่าสิ่งที่คุณอาจประสบคือ GPO หรืออย่างอื่นแทนที่การตั้งค่าระดับ "LocalMachine" ของ ExecutionPolicy คุณไม่สามารถเขียนทับสิ่งที่นโยบายโดเมนมีพร้อมกับคำสั่ง Set-ExecutionPolicy อย่างไรก็ตามอย่างไรก็ตามการตั้งค่าระดับการเข้าถึง "CurrentUser" คุณและคุณเท่านั้นที่จะมีนโยบายการดำเนินการที่ระบุ นี่คือเนื่องจากคอมพิวเตอร์ดูที่ CurrentUser สำหรับนโยบายการดำเนินการก่อนที่จะดูการตั้งค่า LocalMachine
คาห์ 'Powershell Ninja'

1
Set-ExecutionPolicy -Scope "CurrentUser" - ExecutionPolicy "ไม่ จำกัด " เป็นทางออกเดียวที่ทำงานได้สำหรับฉัน ขอบคุณ
Paulj

32

RemoteSigned: สคริปต์ทั้งหมดที่คุณสร้างขึ้นเองจะถูกเรียกใช้และสคริปต์ทั้งหมดที่ดาวน์โหลดจากอินเทอร์เน็ตจะต้องลงนามโดยผู้เผยแพร่ที่เชื่อถือได้

ตกลงเปลี่ยนนโยบายเพียงพิมพ์:

Set-ExecutionPolicy RemoteSigned

ตามที่แนะนำในโพสต์อื่น ๆ : ก็ควรที่จะรวม "-Scope CurrentUser" สำหรับนโยบายที่ปลอดภัยยิ่งขึ้นเมื่อมีเหตุผล
clusterdude

32

เราสามารถรับสถานะปัจจุบันExecutionPolicyโดยคำสั่งด้านล่าง:

Get-ExecutionPolicy;

โดยค่าเริ่มต้นมันเป็นที่ถูก จำกัด ที่จะช่วยให้การดำเนินการของสคริปต์ PowerShell ที่เราต้องตั้ง ExecutionPolicy นี้ไม่ว่าจะเป็นทางอ้อมหรือไม่ จำกัด

เราสามารถกำหนดนโยบายสำหรับผู้ใช้ปัจจุบันเป็นBypassหรือUnrestrictedโดยใช้คำสั่ง PowerShell ด้านล่าง:

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

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

นโยบายที่ไม่ จำกัดจะโหลดไฟล์การกำหนดค่าทั้งหมดและเรียกใช้สคริปต์ทั้งหมด หากคุณเรียกใช้สคริปต์ที่ไม่ได้ลงชื่อที่ดาวน์โหลดจากอินเทอร์เน็ตคุณจะได้รับแจ้งให้ขออนุญาตก่อนที่จะรัน

ในขณะที่นโยบายบายพาสไม่มีสิ่งใดถูกบล็อกและไม่มีคำเตือนหรือพร้อมท์ระหว่างการเรียกใช้งานสคริปต์ บายพาสผ่อนคลายมากกว่าExecutionPolicyUnrestricted


4
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force; AKA วิธีที่รวดเร็วและสกปรกในการบอก VS2015 ให้หยุดบ่นและเรียกใช้สคริปต์เลือดของฉัน ขอบคุณ ผู้ช่วยชีวิต
กัป

1
เครื่องหมายอัฒภาคต่อท้ายที่คำสั่งของคุณไม่มีความหมาย
Bill_Stewart

23

ฉันใช้Windows 10และไม่สามารถเรียกใช้คำสั่งใด ๆ คำสั่งเดียวที่ให้เบาะแสแก่ฉันคือ:

[x 64]

  1. เปิด C: \ Windows \ SysWOW64 \ cmd.exe [ในฐานะผู้ดูแลระบบ]
  2. เรียกใช้คำสั่ง> powershell Set-ExecutionPolicy ไม่ จำกัด

แต่มันไม่ได้ผล มัน จำกัด อาจเป็นนโยบายความปลอดภัยใหม่สำหรับ Windows10 ฉันมีข้อผิดพลาดนี้:

Set-ExecutionPolicy: Windows PowerShell อัปเดตนโยบายการดำเนินการของคุณสำเร็จ แต่การตั้งค่าถูกแทนที่โดยนโยบายที่กำหนดไว้ในขอบเขตที่เฉพาะเจาะจงมากขึ้น เนื่องจากการแทนที่เชลล์ของคุณจะยังคงนโยบายการปฏิบัติที่มีประสิทธิภาพในปัจจุบันของ ...

ดังนั้นฉันจึงพบวิธีอื่น ( โซลูชัน ):

  1. เปิด Run Command / Console ( Win+ R)
  2. ประเภท: gpedit.msc ( ตัวแก้ไขนโยบายกลุ่ม )
  3. เรียกดูเพื่อนโยบายคอมพิวเตอร์เฉพาะที่ -> การกำหนดค่าคอมพิวเตอร์ -> แม่แบบการดูแล -> คอมโพเนนต์ของ Windows -> Windows PowerShell
  4. เปิดใช้งาน " เปิดการทำงานของสคริปต์ "
  5. กำหนดนโยบายตามต้องการ ฉันตั้งค่าของฉันเป็น " อนุญาตสคริปต์ทั้งหมด "

ตอนนี้เปิด PowerShell แล้วเพลิดเพลินไปกับ;)


นี่เป็นการติดตั้งแบบสแตนด์อโลนหรือคุณเชื่อมต่อกับเวิร์กกรุ๊ปหรือโดเมนหรือไม่
MEMark

ทำไมเปิด cmd เพื่อทำมัน? เพียงแค่เปิด ISE (ในฐานะผู้ดูแลระบบ) และพิมพ์Set-ExecutionPolicy RemoteSigned
Kolob Canyon

OMG นี้แก้ไขกล่อง win10 ของฉันในที่สุด @kolob set-executionpolicy ไม่เพียงพอ
xer0x

Unrestrictedคุณไม่ควรจะใช้ เป็นการใช้งานที่ดีกว่าRemoteSigned
Kolob Canyon

@ xer0x ควรตราบเท่าที่คุณเรียกใช้ PowerShell ในฐานะผู้ดูแลระบบ
Kolob Canyon

10

การตั้งค่านโยบายการดำเนินการเป็นเฉพาะสภาพแวดล้อม หากคุณพยายามเรียกใช้สคริปต์จากISE x86 ที่ทำงานอยู่คุณต้องใช้ x86 PowerShell เพื่อตั้งค่านโยบายการดำเนินการ ในทำนองเดียวกันหากคุณใช้ ISE 64 บิตคุณจะต้องตั้งค่านโยบายด้วย PowerShell 64 บิต


10

Win+ Rและพิมพ์คำสั่ง copy paste และกดOK:

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

และรันสคริปต์ของคุณ

จากนั้นยกเลิกการเปลี่ยนแปลงเช่น:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"

10

คุณสามารถข้ามสิ่งนี้ได้โดยใช้คำสั่งต่อไปนี้:

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

นอกจากนี้คุณยังสามารถอ่านบทความนี้โดย Scott Sutherland ที่อธิบาย 15 วิธีที่ต่างกันในการเลี่ยง PowerShell Set-ExecutionPolicyหากคุณไม่มีสิทธิ์ของผู้ดูแลระบบ:

15 วิธีในการหลีกเลี่ยงนโยบายการดำเนินการ PowerShell


นี่อาจเป็นหนึ่งในคู่มือที่น่าสนใจในการแก้ไขปัญหาและทำความเข้าใจกับข้อ จำกัด นี้
Osvaldo Mercado

5
  1. เปิด PowerShell ในฐานะผู้ดูแลระบบและเรียกใช้Set-ExecutionPolicy -Scope CurrentUser
  2. ระบุRemoteSignedและกด Enter
  3. เรียกใช้Set-ExecutionPolicy -Scope CurrentUser
  4. ระบุไม่ จำกัดและกด Enter

5

คุณสามารถลองและเลือกตัวเลือก "ทั้งหมด"

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned


2

ใน PowerShell 2.0 นโยบายการดำเนินการถูกตั้งค่าเป็นปิดใช้งานโดยค่าเริ่มต้น

จากนั้นเป็นต้นมาทีม PowerShell ได้ทำการปรับปรุงมากมายและพวกเขามั่นใจว่าผู้ใช้จะไม่แตกสลายอะไรมากในขณะที่เรียกใช้สคริปต์ ดังนั้นจาก PowerShell 4.0 เป็นต้นไปจะเปิดใช้งานตามค่าเริ่มต้น

ในกรณีของคุณพิมพ์Set-ExecutionPolicy RemoteSignedจากคอนโซล PowerShell และพูดว่าใช่


2

ฉันมีปัญหาเดียวกันวันนี้ นโยบายการดำเนินการ 64 บิตไม่ จำกัด ในขณะที่ 32 บิตถูก จำกัด

ต่อไปนี้เป็นวิธีเปลี่ยนนโยบาย 32 บิตจากระยะไกล:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}

2

ไปยังเส้นทางรีจิสทรีHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShellและการตั้งค่าไปExecutionPolicyRemoteSigned


1
1. เปิด PowerShell ในฐานะผู้ดูแลระบบและเรียกใช้Set-ExecutionPolicy -Scope CurrentUser 2. ระบุRemoteSignedและกด Enter 3. เรียกใช้Set-ExecutionPolicy -Scope CurrentUser 4. ระบุข้อจำกัดและกด Enter
Ramanujam Allam

2

ฉันได้รับคำเตือนอีกครั้งเมื่อฉันพยายามเรียกใช้ Set-ExecutionPolicy RemoteSigned

ฉันแก้ไขด้วยคำสั่งนี้

Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$false

Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false

1

หากคุณอยู่ที่นี่เพราะทำงานด้วยRubyหรือChefและใช้ `` การทำงานของระบบให้ดำเนินการดังนี้:

`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`

คำสั่งนั้นใช้สำหรับรับโฟลเดอร์ "MyDocuments"

-ExecutionPolicy Unrestricted ไม่หลอกลวง

ฉันหวังว่ามันจะเป็นประโยชน์สำหรับคนอื่น


ควรปิด `` ควรอยู่ที่นั่นจริงหรือ
Peter Mortensen

1

คำตอบหลายข้อชี้ไปที่นโยบายการปฏิบัติ อย่างไรก็ตามบางสิ่งจำเป็นต้องมี "ผู้ดูแลระบบ runas" ด้วย สิ่งนี้ปลอดภัยที่สุดเนื่องจากไม่มีการเปลี่ยนแปลงนโยบายการดำเนินการอย่างถาวรและสามารถรับข้อ จำกัด ของผู้ดูแลระบบในอดีตได้ ใช้กับ schedtask เพื่อเริ่มชุดด้วย:

    runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

จากทั้ง Jack Edmonds ด้านบนและ Peter Mortensen / Dhana ของโพสต์วิธีการเรียกใช้แอปพลิเคชันในฐานะ "run as administrator" จาก command prompt?


1

ฉันพบว่าบรรทัดนี้ทำงานได้ดีที่สุดสำหรับเซิร์ฟเวอร์ Windows Server 2008 R2 ของฉัน มีอีกสองคนที่ไม่มีปัญหาหากไม่มีบรรทัดนี้ในสคริปต์ PowerShell ของฉัน:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process

1

เปิดคอนโซล Powershell ในฐานะผู้ดูแลระบบจากนั้นตั้งค่านโยบายการดำเนินการ

Set-ExecutionPolicy -ExecutionPolicy Remotesigned 

0

คุณสามารถใช้วิธีพิเศษในการเลี่ยงผ่าน:

Get-Content "PS1scriptfullpath.ps1" | Powershell-NoProfile -

มันท่อเนื้อหาของสคริปต์ powershell เพื่อ powershell.exe และดำเนินการได้โดยข้ามนโยบายการดำเนินการ


0

นี่เป็นการแก้ไขปัญหาของฉัน

เปิด Windows PowerShellCommand และเรียกใช้แบบสอบถามด้านล่างเพื่อเปลี่ยนExecutionPolicy

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

ถ้ามันขอยืนยันการเปลี่ยนแปลงกด 'Y' และกด Enter



0
  1. เปิด powershell เป็นการบริหาร
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

ใช้คำสั่งนี้



-2

เปิดหน้าต่าง PowerShell ในฐานะผู้ดูแลระบบ มันจะทำงาน.


มันใช้งานไม่ได้ อย่างไรก็ตามการเรียกใช้ powershell Set-ExecutionPolicy RemoteSigned ก็ใช้งานได้
Thronk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.