Câu hỏi Làm thế nào để cho phép thực thi các kịch bản PowerShell?


Khi tôi cố gắng thực thi kịch bản PowerShell, tôi nhận được lỗi này:

Không thể tải tệp C: \ Common \ Scripts \ hello.ps1 vì việc thực thi tập lệnh bị tắt trên hệ thống này. Vui lòng xem "get-help about_signing" để biết thêm chi tiết.
  Tại dòng: 1 char: 13
  +. \ hello.ps1 <<<<
      + CategoryInfo: NotSpecified: (:) [], PSSecurityException
      + FullyQualifiedErrorId: RuntimeException


181
2018-02-08 18:41


gốc




Các câu trả lời:


  1. Khởi động Windows PowerShell bằng tùy chọn "Chạy với tư cách quản trị viên". Chỉ thành viên của nhóm Quản trị viên trên máy tính mới có thể thay đổi chính sách thực thi.

  2. Bật chạy tập lệnh chưa ký bằng cách nhập:

    set-executionpolicy remotesigned
    

Điều này sẽ cho phép chạy các tập lệnh chưa ký mà bạn viết trên máy tính cục bộ của mình và đã ký kịch bản từ Internet.

Xem thêm Chạy tập lệnh tại Thư viện Microsoft TechNet.


273
2018-02-08 18:44



+1 cho điều khiển từ xa thay vì không hạn chế. Bạn có thể chạy tập lệnh cục bộ của mình mà không tự phơi bày những mối nguy hiểm từ mọi nơi khác. - DarrellNorton
Cảm ơn - bài đăng này đã giúp tôi. Tuy nhiên tôi vẫn còn gặp vấn đề nữa vì tôi chưa chạy PowerShell "làm Quản trị viên" trong win8 - sergeantKK
Điều này sẽ thay đổi chính sách vĩnh viễn hay tôi phải làm điều này mỗi khi tôi khởi động lại máy tính của mình? - Ray
Có cách nào để cho phép thực hiện riêng PowerShell script? Vì vậy, có lẽ tôi chỉ muốn cho phép hello.ps1 từ OP hoặc Microsoft.PowerShell_profile.ps1 trên hộp của người dùng? (Tôi nghĩ rằng có thể rơi vào một câu hỏi OP được thừa nhận rộng rãi (ha, mà bây giờ tôi nhìn thấy cũng là của bạn!). Nếu bạn cảm thấy đó là một câu hỏi mới, mặc dù, tôi có thể hỏi nó.) - ruffin
@ruffin Bạn có thể hỏi một câu hỏi riêng cho việc này không? Sau đó bạn có thể liên kết nó ở đây. - Pavel Chuchuva


Chính sách thực thi mặc định được đặt thành bị hạn chế, bạn có thể thấy nó bằng cách gõ:

Get-ExecutionPolicy

Bạn nên nhập thông tin sau để chuyển sang chế độ không hạn chế:

Set-ExecutionPolicy unrestricted

Hi vọng điêu nay co ich


59
2018-02-08 18:43



-1. đó là WAY quá mở để chỉ thực hiện. RemoteSigned tốt hơn. - TomTom
Yêu cầu ký có ý nghĩa nếu bạn mong muốn người dùng sao chép và dán các tập lệnh độc hại từ internet. Nếu bạn cho rằng người dùng không ngu ngốc, thì "từ xa" không thêm bất kỳ sự bảo mật nào và làm cho cuộc sống trở nên khó khăn. - Guss


Trên máy tính của tôi mà tôi sử dụng cho các kịch bản lệnh dev, tôi sẽ sử dụng -unrestricted như trên. Tuy nhiên, khi triển khai các kịch bản lệnh của tôi, với một máy tính người dùng cuối, tôi sẽ chỉ gọi powerhell bằng công tắc -executionpolicy:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1

48
2018-01-14 00:46



Bạn có thể muốn kết hợp thủ thuật này với một mẹo polyglot trong một tệp .CMD. Xem stackoverflow.com/a/8597794/5314 - Jay Bazuzi
Tốt đẹp! Tôi đã triển khai sfx do winrar thực hiện rarlabs.com - MDMoore313
Bí quyết đó cho phép tôi chạy kịch bản PowerShell từ Git Bash (MINGW32 bash) - Kamil Szot


Chúng ta có thể lấy trạng thái của ExecutionPolicy hiện tại bằng lệnh dưới đây:

Get-ExecutionPolicy;

Theo mặc định, nó là Bị giới hạn. Để cho phép thực thi PowerShell Scripts, chúng ta cần thiết lập ExecutionPolicy này làm Bỏ qua hoặc là Không hạn chế.

Chúng tôi có thể đặt chính sách cho Người dùng hiện tại là Bypass hoặc là Unrestricted bằng cách sử dụng bất kỳ lệnh PowerShell nào dưới đây:

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

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

Không hạn chế chính sách tải tất cả các tệp cấu hình và chạy tất cả các tập lệnh. Nếu bạn chạy một tập lệnh chưa ký được tải xuống từ Internet, bạn sẽ được nhắc cho phép trước khi nó chạy.

Trong khi ở Bỏ qua chính sách, không có gì bị chặn và không có cảnh báo hoặc lời nhắc trong khi thực thi tập lệnh. Bypass ExecutionPolicy thoải mái hơn Unrestricted.


7
2017-09-07 07:06





Tùy thuộc vào phiên bản và cấu hình Windows, bạn có thể có cảnh báo sau, ngay cả trong Unrestricted chế độ:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D")

Giải pháp là sử dụng chính sách "bỏ qua", được bật bằng lệnh sau:

Set-ExecutionPolicy Bypass

Từ tài liệu:

Bỏ qua: Không có gì bị chặn và không có cảnh báo hoặc lời nhắc.

Điều này rõ ràng là không an toàn, hãy hiểu những rủi ro liên quan.


3
2018-01-21 10:01



đây là cách duy nhất tôi có thể làm cho kịch bản của mình chạy trong môi trường WINE với PowerShell 2.0. Cảm ơn bạn. - Wyatt8740


Khóa reg với:
Windows Registry Editor phiên bản 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows \ PowerShell]   "EnableScripts" = dword: 00000001 "ExecutionPolicy" = "Bỏ qua"

và:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

cũng thực sự hoạt động.


1
2017-11-29 10:10





Lý do phím reg hoạt động, là bởi vì nó đang làm chính xác những gì các lệnh PS làm. Các lệnh viết các thay đổi cho các phím reg. Lệnh nhanh hơn và dễ dàng hơn nhiều so với việc tạo khóa reg hoặc đào sâu vào sổ đăng ký.


-1
2018-04-05 13:49



Điều đó chỉ là sai: các phím được đề cập trong các câu trả lời khác thay đổi chính sách thực thi quyền hạn, sau đó cho phép tập lệnh PowerShell chạy. - Patrick R.