ส่วนใหญ่ของคำตอบที่มีอยู่อธิบายวิธีแต่น้อยมากอธิบายทำไม และก่อนที่คุณจะเรียกใช้โค้ดจากคนแปลกหน้าบนอินเทอร์เน็ตโดยเฉพาะโค้ดที่ปิดใช้งานมาตรการรักษาความปลอดภัยคุณควรเข้าใจว่าคุณกำลังทำอะไรอยู่ ดังนั้นนี่คือรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับปัญหานี้
จากหน้า TechNet เกี่ยวกับนโยบายการดำเนินการ :
นโยบายการดำเนินการ Windows PowerShell ช่วยให้คุณกำหนดเงื่อนไขภายใต้ Windows PowerShell ที่โหลดไฟล์การกำหนดค่าและเรียกใช้สคริปต์
ประโยชน์ที่จะได้รับจากการใช้ข้อมูลพื้นฐานของ PowerShell - นโยบายการดำเนินการและการลงนามรหัสคือ:
- การควบคุมการดำเนินการ - ควบคุมระดับของความไว้วางใจสำหรับการดำเนินการสคริปต์
- Command Highjack - ป้องกันการฉีดคำสั่งในเส้นทางของฉัน
- ข้อมูลประจำตัว - เป็นสคริปต์ที่สร้างและลงนามโดยนักพัฒนาที่ฉันเชื่อถือและ / หรือลงชื่อด้วยใบรับรองจาก Certificate Authority ที่ฉันเชื่อถือ
- Integrity - สคริปต์ไม่สามารถแก้ไขได้โดยมัลแวร์หรือผู้ใช้ที่เป็นอันตราย
Get-ExecutionPolicy
ในการตรวจสอบนโยบายการดำเนินการปัจจุบันของคุณคุณสามารถเรียกใช้ แต่คุณอาจจะอยู่ที่นี่เพราะคุณต้องการเปลี่ยน
ในการทำเช่นนั้นคุณจะต้องเรียกใช้Set-ExecutionPolicy
cmdlet
คุณจะต้องตัดสินใจสองเรื่องสำคัญเมื่อทำการอัปเดตนโยบายการดำเนินการ
ประเภทนโยบายการดำเนินการ:
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 จะไม่พบสิ่งที่ไม่สามารถดำเนินการได้