เพื่อแก้ไขข้อผิดพลาด “การเรียกใช้สคริปต์ถูกปิดใช้งานในระบบนี้” บนพีซี Windows 10 ส่วนตัว ให้ตั้งค่า PowerShell เป็นRemoteSigned สำหรับบัญชีผู้ใช้ของคุณ จากนั้นเรียกใช้สคริปต์จากโฟลเดอร์ของสคริปต์นั้น เปิด Windows PowerShell แล้วป้อน:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
ยืนยันการเปลี่ยนแปลงเมื่อได้รับแจ้ง การเปลี่ยนแปลงนี้มีผลเฉพาะกับบัญชี Windows ของคุณเท่านั้น และไม่จำเป็นต้องใช้หน้าต่างผู้ดูแลระบบ หากคุณต้องการเรียกใช้สคริปต์ที่เชื่อถือได้เพียงครั้งเดียว ให้ใช้ตัวเลือกเซสชันชั่วคราวด้านล่างแทน
1. ตรวจสอบว่านโยบายการดำเนินการใดที่กำลังบล็อกสคริปต์อยู่
ในแอปพลิเคชัน PowerShell เดียวกันกับที่คุณเห็นข้อผิดพลาด ให้รันคำสั่งต่อไปนี้:
Get-ExecutionPolicy -List
คำสั่งนี้แสดงรายการนโยบายสำหรับนโยบายกลุ่ม เซสชันปัจจุบัน บัญชีของคุณ และคอมพิวเตอร์Restrictedอนุญาตให้ใช้คำสั่งแต่ละรายการได้ แต่บล็อกไฟล์สคริปต์ เป็นนโยบายเริ่มต้นสำหรับคอมพิวเตอร์ไคลเอ็นต์ Windows เมื่อไม่มีการตั้งค่านโยบายอื่น PowerShell จะใช้การตั้งค่าที่เฉพาะเจาะจงที่สุดที่เกี่ยวข้อง โดยการตั้งค่านโยบายกลุ่มจะมีลำดับความสำคัญเหนือกว่า
ตรวจสอบขอบเขตที่ระบุไว้ก่อนทำการเปลี่ยนแปลงนโยบาย
นโยบายการเรียกใช้งาน (Execution Policy) เป็นคุณสมบัติด้านความปลอดภัยที่ช่วยป้องกันไม่ให้สคริปต์ทำงานโดยไม่ตั้งใจ แต่ Microsoft อธิบายว่าเป็นระบบป้องกันหลายชั้นมากกว่าจะเป็นขอบเขตความปลอดภัย สคริปต์ยังคงอาจเป็นอันตรายได้ ดังนั้นควรตรวจสอบโค้ดและตรวจสอบแหล่งที่มาของสคริปต์ก่อนอนุญาตให้ทำงาน ดูคู่มือการใช้งานนโยบายการเรียกใช้งานของ Windows PowerShell 5.1 จาก Microsoft
2. อนุญาตให้ใช้งานสคริปต์ในเครื่องสำหรับบัญชีของคุณ
สำหรับสคริปต์ที่คุณสร้างหรือไว้วางใจ ให้ตั้งค่านโยบายระดับผู้ใช้เป็นRemoteSigned:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
เมื่อ PowerShell ถามว่าคุณต้องการเปลี่ยนนโยบายการดำเนินการหรือไม่ ให้พิมพ์Yและกด Enter หากคุณต้องการดำเนินการต่อ การเปลี่ยนแปลงจะมีผลทันที คุณไม่จำเป็นต้องรีสตาร์ท PowerShell การเปลี่ยนแปลงนี้CurrentUserจะมีผลเฉพาะบัญชีของคุณเท่านั้น และหลีกเลี่ยงการเปลี่ยนแปลงLocalMachineขอบเขตเริ่มต้น ซึ่งมีผลกับทุกคนและต้องใช้หน้าต่าง PowerShell ที่มีสิทธิ์ผู้ดูแลระบบ
ยืนยันการเปลี่ยนแปลง RemoteSigned เฉพาะบัญชีเมื่อได้รับแจ้ง
RemoteSignedอนุญาตให้เรียกใช้สคริปต์ในเครื่องที่ไม่ถูกทำเครื่องหมายว่าเป็นไฟล์ดาวน์โหลดจากอินเทอร์เน็ต โดยกำหนดให้สคริปต์ที่ดาวน์โหลดต้องมีลายเซ็นดิจิทัลที่เชื่อถือได้ เว้นแต่คุณจะปลดบล็อกไฟล์ใดไฟล์หนึ่งโดยเฉพาะ หลีกเลี่ยงการเปลี่ยนแปลงนโยบายเป็นUnrestrictedหรือBypassเพื่อแก้ไขปัญหาโดยทั่วไป: การตั้งค่าเหล่านั้นอนุญาตให้เรียกใช้สคริปต์ได้มากขึ้นโดยมีคำเตือนน้อยลง
3. เรียกใช้สคริปต์จากโฟลเดอร์ของมัน
ย้ายไปยังโฟลเดอร์ที่มี.ps1ไฟล์นั้น จากนั้นใส่เครื่องหมาย./(หรือเครื่องหมาย `<br>` แบบ Windows .\) นำหน้าชื่อไฟล์ ตัวอย่างเช่น:
Set-Location 'C:\Scripts'
.\MyScript.ps1
PowerShell จะไม่เรียกใช้ไฟล์จากไดเร็กทอรีปัจจุบันโดยอัตโนมัติเมื่อคุณพิมพ์เฉพาะชื่อไฟล์ หากเส้นทางมีช่องว่างหรือคุณกำลังเรียกใช้จากโฟลเดอร์อื่น ให้ใช้ตัวดำเนินการเรียกใช้ (call operator) และใส่เครื่องหมายอัญประกาศครอบเส้นทางแบบเต็ม:
& 'C:\Scripts\My Script.ps1'
ตรวจสอบนโยบายที่มีผลบังคับใช้ จากนั้นเรียกใช้สคริปต์โดยใช้พาธของสคริปต์นั้น
4. หากสคริปต์ที่ดาวน์โหลดมายังคงถูกบล็อกอยู่
ด้วยวิธีนี้RemoteSignedสคริปต์ที่ไม่มีลายเซ็นดิจิทัลซึ่งดาวน์โหลดจากอินเทอร์เน็ตอาจยังคงถูกบล็อกอยู่แม้หลังจากที่คุณเปลี่ยนนโยบายแล้ว ขั้นแรกให้ตรวจสอบสคริปต์และยืนยันว่าคุณเชื่อถือแหล่งที่มาของสคริปต์นั้น หากคุณเชื่อถือ ให้ปลดบล็อกเฉพาะไฟล์นั้น:
Unblock-File -LiteralPath '.\MyScript.ps1'
.\MyScript.ps1
ใช้เส้นทางที่ถูกต้องหากไฟล์อยู่ที่อื่นUnblock-Fileคำสั่งนี้จะลบเครื่องหมายการดาวน์โหลดจากอินเทอร์เน็ตของไฟล์ออก แต่จะไม่ตรวจสอบโค้ดหรือทำให้สคริปต์ที่ไม่ปลอดภัยปลอดภัยขึ้น Microsoft ได้บันทึกพฤติกรรมนี้ไว้ใน เอกสารอ้างอิง Windows PowerShell 5.1 Unblock -File
ปลดบล็อกเฉพาะไฟล์ที่ตรวจสอบแล้วและแหล่งที่มาที่คุณเชื่อถือได้เท่านั้น
ใช้นโยบายชั่วคราวสำหรับหนึ่งเซสชัน
หากคุณไม่ต้องการให้การตั้งค่าต่อผู้ใช้คงอยู่ถาวร ให้ปิดหน้าต่าง PowerShell ปัจจุบันแล้วเปิดหน้าต่างใหม่ จากนั้นเรียกใช้คำสั่งนี้ก่อนสคริปต์:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
ขอบเขตProcessการใช้งานจะมีผลเฉพาะกับเซสชัน PowerShell นั้นและกระบวนการย่อยของมันเท่านั้น การปิดหน้าต่างจะล้างขอบเขตการใช้งานนั้น อย่างไรก็ตาม ยังคงต้องปฏิบัติตามRemoteSignedกฎอยู่ ดังนั้นไฟล์ที่ดาวน์โหลดมาโดยไม่มีลายเซ็นอาจต้องได้รับการตรวจสอบและปลดบล็อกทีละไฟล์เอกสารอ้างอิง Set-ExecutionPolicy จะอธิบายขอบเขตการใช้งานและค่าของนโยบายที่มีอยู่
หากข้อผิดพลาดยังคงอยู่
เรียกใช้คำสั่งGet-ExecutionPolicyเพื่อดูนโยบายที่มีผลบังคับใช้ และGet-ExecutionPolicy -Listตรวจสอบว่าอะไรเป็นตัวควบคุม หาก มีการตั้งค่า MachinePolicyหรือUserPolicyไว้ นโยบายกลุ่มขององค์กรจะเป็นตัวควบคุมการเรียกใช้สคริปต์ อย่าพยายามเขียนทับนโยบายนี้ โปรดติดต่อผู้ดูแลระบบของคุณ
ตรวจสอบให้แน่ใจว่าคุณได้เปลี่ยนนโยบายใน PowerShell เวอร์ชันเดียวกับที่คุณใช้รันสคริปต์ Windows PowerShell 5.1 ( powershell.exe) และ PowerShell 7 ( pwsh.exe) จะจัดเก็บการตั้งค่านโยบายแยกกัน
หากคุณต้องการลบการเปลี่ยนแปลงต่อผู้ใช้ในภายหลัง ให้เรียกใช้คำสั่ง นี้ คำสั่ง Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUserนี้จะล้างเฉพาะ การตั้งค่าเท่านั้น CurrentUserนโยบายที่มีผลบังคับใช้จะกลับไปใช้ขอบเขตที่กำหนดค่าไว้ก่อนหน้านี้ หรือหากไม่มีขอบเขตใด ๆ ใน Windows 10 ก็จะกลับไปใช้ขอบเขตเริ่มRestrictedต้น
สำหรับระบบ Windows 10 ส่วนบุคคลส่วนใหญ่ การเรียกใช้สคริปต์ในเครื่องพร้อมกับการตรวจสอบสคริปต์ที่ดาวน์โหลดแล้ว RemoteSignedก็CurrentUserเพียงพอแล้ว ควรจำกัดขอบเขตให้แคบ ตรวจสอบโค้ดที่ไม่คุ้นเคย และปล่อยให้ผู้ดูแลระบบไอทีจัดการการตั้งค่าส่วนกลาง