Vì câu hỏi này tiếp tục thu hút các câu trả lời bị nội dung câu hỏi bác bỏ hoặc không giải quyết được vấn đề thực tế, vui lòng đọc bản tóm tắt đơn giản này về những điều bạn cần biết:
- Đây không phải là "Tại sao cài đặt mặc định PowerShell của tôi không chạy tập lệnh?" câu hỏi.
- Đây không phải là "Tại sao cài đặt PowerShell của tôi không chạy các tập lệnh được tải xuống từ internet?" câu hỏi.
- Câu hỏi đặt ra là tại sao
RemoteSigned
chính sách thực thi lại ngăn chặn việc thực thi tập lệnh khi không nên.RemoteSigned
là chính sách thực thi duy nhất mà tôi muốn sử dụng. Tôi biết rằng có các chính sách khác, ít hạn chế hơn. Nếu những chính sách đó là những sản phẩm thay thế được chấp nhận, tôi sẽ chỉ sử dụng chúng thay thế và câu hỏi này sẽ không tồn tại.- Chính sách thực thi đã được đặt thành
RemoteSigned
. Thay đổi nó từRemoteSigned
thànhRemoteSigned
không phải là một giải pháp.- Tệp script được tạo và lưu trữ cục bộ.
- Tệp script không bị chặn. Tệp script không bao giờ bị chặn (xem phần trước).
- Không thể bỏ chặn tệp script vì không có gì để bỏ chặn (xem phần trước).
- Tệp script được quản trị viên (cố gắng thực hiện).
Windows PowerShell
là ứng dụng duy nhất liên quan. KhôngWindows PowerShell ISE
hoặcCommand Prompt
bất kỳ công cụ hoặc trình chỉnh sửa nào khác có liên quan.- Nguyên nhân của vấn đề đã được xác định (xem câu trả lời được chấp nhận). Sau gần 8 năm, tôi nghĩ rằng tất cả các giải thích rõ ràng khác, dù có thể áp dụng hay không, cũng đã được đăng tải. Nếu bạn nghĩ khác thì vui lòng đọc toàn bộ câu hỏi và câu trả lời hiện có trước khi thêm câu trả lời của bạn.
Tôi đang sử dụng Windows PowerShell 2.0 trên Windows 7 Professional 64-bit. Tôi có một tập lệnh trên Desktop
đó gây ra lỗi sau khi tôi cố chạy nó:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Tôi vừa là quản trị viên miền vừa là quản trị viên cục bộ và nếu tôi chạy Get-ExecutionPolicy -List
, tôi có thể thấy rằng Group Policy Object
tôi đã tạo để định cấu hình PowerShell đang áp dụng RemoteSigned
chính sách thực thi ở cấp máy một cách chính xác :
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Tôi đã tự tạo tập lệnh Notepad
và sử dụng tiện ích của Sysinternalsstreams
và Properties
hộp thoại tệp để xác nhận rằng tập lệnh không được coi là đến từ internet. Nếu tôi sao chép tập lệnh vào mạng chia sẻ trên máy chủ miền, thì tập lệnh đó được phép thực thi. Nếu tôi chạy Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
thì tập lệnh cục bộ vẫn không được phép thực thi, điều này có ý nghĩa vì chính sách thực thi tại MachinePolicy
phạm vi sẽ được ưu tiên.
Theo tài liệu của about_Execution_Policies
( hiện tại ; tại thời điểm câu hỏi ), RemoteSigned
chính sách có nghĩa là:
Tập lệnh có thể chạy.
Yêu cầu chữ ký điện tử từ một nhà xuất bản đáng tin cậy trên các tập lệnh và tệp cấu hình được tải xuống từ Internet (bao gồm các chương trình e-mail và nhắn tin tức thì).
Không yêu cầu chữ ký điện tử trên các tập lệnh bạn đã chạy và bạn đã viết trên máy tính cục bộ (không phải tải xuống từ Internet).
Rủi ro khi chạy các tập lệnh chưa được ký từ các nguồn khác ngoài Internet và các tập lệnh đã ký nhưng độc hại.
Tập lệnh của tôi không được ký, nhưng vì nó vừa được tạo và thực thi cục bộ, nên nó sẽ đáp ứng dấu đầu dòng thứ ba ở trên. Vì thế...
- Tại sao tập lệnh của tôi không được phép chạy?
- Tại sao PowerShell phàn nàn rằng tập lệnh của tôi "không được ký điện tử" khi yêu cầu đó chỉ áp dụng cho các tệp từ Internet?
- Tại sao PowerShell không còn quan tâm đến việc tập lệnh không được ký khi nó chạy từ một mạng chia sẻ?