Câu hỏi PowerShell cho biết “việc thực thi các tập lệnh bị tắt trên hệ thống này”.


Tôi đang cố gắng chạy một tập tin .cmd gọi một kịch bản PowerShell từ dấu nhắc lệnh, và tôi nhận được lỗi dưới đây:

Không thể tải Management_Install.ps1 vì việc thực thi tập lệnh bị tắt trên hệ thống này.

Tôi đã chạy set-executionpolicy unrestricted và khi tôi chạy get-executionpolicy từ PowerShell tôi nhận được unrestricted trở lại.

// Đầu ra từ Powershell

PS C: \ Users \ Administrator> get-executionpolicy

Không hạn chế

// Đầu ra từ DOS

C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Cổng quản lý \ Install \ Scr

ipts> powershell. \ Quản lý_Install.ps1 1

CẢNH BÁO: Chạy PowerShell x86 ...

Tệp C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Quản lý Cổng \ Cài đặt \ Scripts \ Management_Install.ps1 không thể tải được 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: 25

  • . \ Management_Install.ps1 <<<< 1

    • CategoryInfo: NotSpecified: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Quản lý Cổng \ Cài đặt \ Scripts> tạm dừng

Bấm phím bất kỳ để tiếp tục . . .

Hệ thống là Windows Server 2008 R2.

Tôi đang làm gì sai?


1282
2017-10-27 21:39


gốc


Không có người bạn đời nào, tôi đăng nhập với tư cách là Quản trị viên và cũng đã chạy với tư cách là "Quản trị viên" và có kết quả tương tự như trên ... - Conor
Đã đến đáy của nó, lỗi là sai lầm, vấn đề là trong kịch bản PowerShell của tôi, cảm ơn! - Conor
@ChristopheD Sai. Không chạy với tư cách quản trị viên trừ khi bạn biết tại sao. Đó là một thói quen nguy hiểm và một cách xấu để giải quyết một vấn đề mà bạn không hiểu - Kolob Canyon
@KolobCanyon Yeah, nhưng nó hoạt động đáng ngạc nhiên thường xuyên. - Erhannis
Giá trị của nó chỉ ra rằng Chính sách thực thi mang một số phạm vi và chạy PowerShell theo nhiều cách khác nhau có thể giúp bạn có các chính sách khác nhau. Để xem danh sách các chính sách, hãy chạy Get-ExecutionPolicy -List. - Bacon Bits


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


Nếu bạn đang sử dụng Windows Server 2008 R2 sau đó có một x64 và x86 phiên bản PowerShell cả hai đều phải có các chính sách thực thi được thiết lập. Bạn đã đặt chính sách thực thi trên cả hai máy chủ chưa?

Là một Người quản lý, bạn có thể thiết lập chính sách thực thi bằng cách gõ vào cửa sổ PowerShell của bạn:

Set-ExecutionPolicy RemoteSigned

Để biết thêm thông tin, hãy xem Sử dụng lệnh Cmdlet Set-ExecutionPolicy.


1697
2017-10-28 01:16



Cảm ơn. Đang chạy C:\Windows\SysWOW64\WindowsPowerShell\v1.0\ powershell.exe với tư cách là Quản trị viên, sau đó Set-ExecutionPolicy RemoteSigned đã giúp! - Glen Little
Set-ExecutionPolicy Restricted dường như là cách để hoàn tác nó nếu bạn muốn đặt các quyền trở lại như sau: technet.microsoft.com/en-us/library/ee176961.aspx. Phương pháp bỏ qua tạm thời bằng @Jack Edmonds trông an toàn hơn với tôi: powershell -ExecutionPolicy ByPass -File script.ps1 - SharpC
Tôi đã không thử các tuyến đường bỏ qua, nhưng các phương pháp Set / Reset cho phép tôi cài đặt / gỡ cài đặt NUGET jQuery UI 1.11.2 trong VS2013. Cảm ơn! - Analytic Lunatic
Để có chính sách an toàn hơn, hãy điều chỉnh phạm vi cho người dùng thực tế: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - Nuno Aniceto
Cảm ơn. Điều này làm việc cho tôi. Thực thi lệnh trong PowerShell với tư cách Quản trị viên. - BenJaminSila


Bạn có thể bỏ qua chính sách này bằng cách thêm -ExecutionPolicy ByPass khi chạy PowerShell

powershell -ExecutionPolicy ByPass -File script.ps1

541
2018-02-06 21:28



Đúng như trái ngược với việc để mọi thứ được mở theo mặc định để các sysadmins lười biếng hoặc không biết gì có thể hướng về các Sản phẩm Microsoft dễ bị tổn thương như thế nào - Luis
Thay đổi chính sách hệ thống không thực sự là một giải pháp mặc định, trừ khi bạn thực sự nghĩ đến nó. Do đó giải pháp này có vẻ nên được ưa thích như là một bước đầu tiên. - user1020853
luis, nhưng nó được mở theo mặc định. nó chỉ là bạn phải thêm / google cho một điều nữa khi chạy nó. đó là ngu ngốc, bạn có một sức mạnh sẽ đi sau đó bạn có thể chạy điều đó. - Lassi Kinnunen
Hillarious. Bây giờ tôi sẽ nghĩ trước khi tôi thấy một bộ phim mà một hacker viết một lệnh như decrypt data hoặc là hack the system. ExecutionPolicy Bypass trông giống như vậy :) - gluk47
một lưu ý cho tất cả những người bình luận dốt nát. Bạn đang nói như thể không có vấn đề về gà và trứng ở đây. Bạn không thể chạy lệnh này từ tập lệnh PowerShell. Nó yêu cầu đầu vào người dùng trực tiếp. Cũng giống như mọi tính năng bảo mật khác trên mọi hệ điều hành trong lịch sử máy tính, nó có thể được tắt với quyền và phương thức phù hợp. - Preston


Tôi có một vấn đề tương tự và lưu ý rằng mặc định cmd trên Windows Server 2012, đang chạy phiên bản x64.

Dành cho Windows 7, Windows 8, Windows Server 2008 R2 hoặc là Windows Server 2012, chạy các lệnh sau Người quản lý:

x86 (32 bit)
Mở C:\Windows\SysWOW64\cmd.exe
Chạy lệnh powershell Set-ExecutionPolicy RemoteSigned

x64 (64 bit)
Mở C:\Windows\system32\cmd.exe
Chạy lệnh powershell Set-ExecutionPolicy RemoteSigned

Bạn có thể kiểm tra chế độ bằng

  • Trong CMD: echo %PROCESSOR_ARCHITECTURE%
  • Trong Powershell: [Environment]::Is64BitProcess

Tham khảo:
MSDN - Chính sách thực thi Windows PowerShell
Windows - 32bit so với 64bit thư mục giải thích


108
2017-08-30 13:10



Có vẻ như bạn đã gắn nhãn "x86" là "x64" và ngược lại? - Olivier Dulac
cảm ơn, ai đó đã định dạng lại - Ralph Willgoss
@RalphWillgoss Bị chặn cố gắng trao đổi các ví dụ, vui lòng cho chúng tôi biết nếu cần thêm hành động stackoverflow.com/review/suggested-edits/15088371 - Samuel Liew♦
@SamuelLiew được sửa đổi cho phù hợp với ý định chỉnh sửa dự kiến. cám ơn - Ralph Willgoss


Hầu hết các câu trả lời hiện có giải thích Làm saonhưng rất ít giải thích Tại sao. Và trước khi bạn đi xung quanh thực thi mã từ người lạ trên Internet, đặc biệt là mã mà vô hiệu hóa các biện pháp an ninh, bạn nên hiểu chính xác những gì bạn đang làm. Vì vậy, đây là một chút chi tiết hơn về vấn đề này.

Từ TechNet Giới thiệu về Trang chính sách thực thi:

Chính sách thực thi Windows PowerShell cho phép bạn xác định các điều kiện mà Windows PowerShell tải tệp cấu hình và chạy tập lệnh.

Những lợi ích trong đó, như được liệt kê bởi Khái niệm cơ bản về PowerShell - Chính sách thực thi và ký mã, là:

  • Kiểm soát thực thi - Kiểm soát mức độ tin cậy để thực thi các tập lệnh.
  • Command Highjack - Ngăn chặn tiêm các lệnh trong đường dẫn của tôi.
  • Danh tính - Kịch bản có được tạo và ký bởi nhà phát triển mà tôi tin tưởng và / hoặc được ký với chứng chỉ từ Tổ chức phát hành chứng chỉ mà tôi tin tưởng hay không.
  • Chính trực - Không thể sửa đổi tập lệnh bằng phần mềm độc hại hoặc người dùng độc hại.

Để kiểm tra chính sách thực hiện hiện tại của bạn, bạn có thể chạy Get-ExecutionPolicy. Nhưng bạn có thể ở đây vì bạn muốn thay đổi nó.

Để làm như vậy bạn sẽ chạy Set-ExecutionPolicy cmdlet.

Bạn sẽ có hai quyết định chính để thực hiện khi cập nhật chính sách thực thi.

Loại chính sách thực hiện:

  • Restricted - Không có Script nào cục bộ, từ xa hoặc tải xuống có thể được thực hiện trên hệ thống.
  • AllSigned - Tất cả tập lệnh được chạy yêu cầu phải được ký điện tử.
  • RemoteSigned - Tất cả các tập lệnh từ xa (UNC) hoặc tải xuống cần phải được ký.
  • Unrestricted - Không yêu cầu chữ ký cho bất kỳ loại tập lệnh nào.

Phạm vi thay đổi mới

  • LocalMachine - Chính sách thực thi ảnh hưởng đến tất cả người dùng máy tính.
  • CurrentUser - Chính sách thực thi chỉ ảnh hưởng đến người dùng hiện tại.
  • Process - Chính sách thực thi chỉ ảnh hưởng đến quá trình Windows PowerShell hiện tại.

† = Mặc định

Ví dụ: nếu bạn muốn thay đổi chính sách thành RemoteSigned chỉ cho CurrentUser, bạn sẽ chạy lệnh sau:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

chú thích: Để thay đổi chính sách Thực thi, bạn phải đang chạy PowerShell với tư cách quản trị viên. Nếu bạn đang ở chế độ thông thường và cố gắng thay đổi chính sách thực thi, bạn sẽ nhận được lỗi sau:

Truy cập vào khoá đăng ký 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell' bị từ chối. Để thay đổi chính sách thực hiện cho phạm vi mặc định (LocalMachine), hãy khởi động Windows PowerShell bằng tùy chọn "Chạy với tư cách quản trị viên".

Nếu bạn muốn thắt chặt các hạn chế nội bộ trên các tập lệnh của riêng bạn mà không được tải xuống từ Internet (hoặc ít nhất không chứa siêu dữ liệu UNC), bạn có thể buộc chính sách chỉ chạy các tập lệnh đã ký. Để ký các kịch bản của riêng bạn, bạn có thể làm theo hướng dẫn trên bài viết của Scott Hanselman về Ký kịch bản PowerShell.

chú thíchHầu hết mọi người đều có thể gặp phải lỗi này bất cứ khi nào họ mở Powershell vì điều đầu tiên mà PS cố gắng thực hiện khi nó khởi chạy là thực thi kịch bản hồ sơ người dùng của bạn để thiết lập môi trường của bạn, tuy nhiên bạn thích nó.

Tệp thường nằm ở:

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

Bạn có thể tìm thấy vị trí chính xác bằng cách chạy biến powershell

$profile

Nếu không có gì bạn quan tâm trong hồ sơ, và không muốn phiền phức với các thiết lập bảo mật của bạn, bạn chỉ có thể xóa nó và PowerShell sẽ không tìm thấy bất cứ điều gì mà nó không thể thực thi.


91
2017-11-16 08:05



Tôi cảm thấy cần lưu ý rằng trong khi chính sách thực thi là một biện pháp bảo mật, nó không phải là một biện pháp nhằm ngăn chặn người dùng thực thi mã PowerShell. Chính sách thực thi là một thứ được dự định bảo vệ tập lệnh của bạn và xác định ai đã viết, sửa đổi hoặc phê duyệt họ và đó là tất cả. Nó tầm thường đi xung quanh chính sách thực thivới một cái gì đó đơn giản như Get-Content .\MyFile.ps1 | powershell.exe -NoProfile -. - Bacon Bits
Với sự tồn tại của -ExecutionPolicy ByPass tuy nhiên, mục đích của chính sách này là gì? Là nó chỉ để ngăn chặn người dùng vô tình mở một bàn điều khiển PowerShell và chạy một kịch bản độc hại? Không phải kẻ tấn công chỉ sử dụng tập lệnh thực thi hoặc tập lệnh batch nếu họ muốn giải quyết vấn đề này? Ngay cả sau khi đọc @BaconBits bình luận tôi không hoàn toàn chắc chắn những gì kịch bản chính sách này có nghĩa là để ngăn chặn ... - Ajedi32
@ Ajedi32 Nói rằng tôi có một nhiệm vụ chạy một kịch bản trên một mạng chia sẻ. Khi tôi gọi tập lệnh của mình, tôi muốn quy trình xác minh rằng tập lệnh được ký. Tôi muốn mã của tôi để kiểm tra lại rằng kịch bản tôi sẽ chạy là mã tôi tin cậy để chạy. Tôi không quan tâm nếu bạn có thể chạy mã của tôi. Ngừng đó là công việc của quyền truy cập. Tôi chỉ muốn ngăn cản bạn làm cho tôi chạy mã mà tôi không viết. Quyền truy cập có nghĩa là hệ điều hành ngăn bạn sửa đổi mã của tôi khi bạn đăng nhập. Chính sách ký và thực thi mã có nghĩa là tập lệnh của tôi chưa được sửa đổi khi tôi hãy chạy nó. - Bacon Bits


Trong Windows 7:

Vào Start Menu và tìm kiếm "Windows PowerShell ISE".

Nhấp chuột phải vào phiên bản x86 và chọn "Chạy với tư cách quản trị viên".

Ở phần trên cùng, dán Set-ExecutionPolicy RemoteSigned; chạy tập lệnh. Chọn "Có".

Lặp lại các bước này cho phiên bản 64 bit của Powershell ISE (phiên bản không phải là x86).

Tôi chỉ làm rõ các bước mà @Chad Miller ám chỉ. Cảm ơn Chad!


33
2017-12-04 05:25



Tôi cần phải làm điều này cho cả hai phiên bản 64-bit và 32-bit. Cảm ơn gợi ý của bạn. - Nick


Cũng chạy lệnh này trước khi kịch bản cũng giải quyết được vấn đề:

set-executionpolicy unrestricted

33
2018-03-27 06:11



-1 - Tuân theo nguyên tắc của sự cho phép ít nhất. Ít nhất đặt chính sách thành RemoteSigned trước khi xóa tất cả các hạn chế về chính sách bảo mật của bạn. Nếu điều đó không hiệu quả, hãy đánh giá lại điểm đau của bạn là gì và tại sao nó không hoạt động. Bạn có thể đặt unrestricted như một phương sách cuối cùng, nhưng nó không phải là điểm khởi đầu của bạn. - KyleMit
Cảm ơn bạn đã chỉ ra tùy chọn này. Với tất cả sự tôn trọng về nhu cầu bảo mật cho mục đích sản xuất, trong thời gian khi nhu cầu tạo mẫu nhanh chóng quá cao, tất cả các chính sách và bảo mật thực sự có được cách để hoàn thành công việc. - tishma
Về việc tạo lại nhận xét, tôi sợ rằng đây là lý do tại sao mã crappy được đưa vào sản xuất. Tất nhiên đây chỉ là một ví dụ tầm thường, nhưng nếu bạn không thể giải quyết một cái gì đó tầm thường này trong quá trình phát triển, đó là một lo lắng cho việc phát hành. Ngoài ra, đối với mã riêng biệt, và nếu bạn có thể, biết môi trường đích - chúng tôi đặt phần lớn các hệ thống nội bộ của chúng tôi là Remotesigned. - Trix


Nếu bạn đang ở trong một môi trường mà bạn không phải là quản trị viên, bạn có thể đặt Chính sách thực thi chỉ dành cho bạn và nó sẽ không yêu cầu quản trị viên.

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

hoặc là

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

Bạn có thể đọc tất cả về nó trong mục trợ giúp.

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

26
2017-11-19 19:13



Làm việc tuyệt vời cho tôi trong Windows 8, ngay cả khi Set-ExecutionPolicy Unrestricted với tư cách là quản trị viên dường như không "hạn chế" đủ để thực sự trợ giúp. - patridge
Tôi tin rằng những gì bạn có thể gặp phải là một GPO hoặc một cái gì đó khác ghi đè lên thiết lập của bạn về mức độ "LocalMachine" của ExecutionPolicy. Bạn không thể ghi đè lên những gì một chính sách tên miền đã có sẵn với lệnh Set-ExecutionPolicy. Tuy nhiên, nhưng thiết lập mức truy cập "CurrentUser", bạn và chỉ có bạn mới có chính sách thực thi được chỉ định. Điều này là do máy tính xem xét CurrentUser cho chính sách thực thi trước khi nó nhìn vào thiết lập LocalMachine. - Micah 'Powershell Ninja'
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted" là giải pháp duy nhất làm việc cho tôi. Cảm ơn bạn - Paulj


RemoteSigned: tất cả các tập lệnh bạn tự tạo sẽ được chạy và tất cả các tập lệnh được tải xuống từ Internet sẽ cần được một nhà xuất bản đáng tin cậy ký.

OK, thay đổi chính sách bằng cách gõ:

Set-ExecutionPolicy RemoteSigned

22
2017-07-20 12:37





Tôi đang sử dụng Windows 10 và không thể chạy bất kỳ lệnh nào. Lệnh duy nhất cho tôi một số manh mối là:

[x64]

  1. Mở C: \ Windows \ SysWOW64 \ cmd.exe [với tư cách là quản trị viên]
  2. Chạy lệnh> powershell Set-ExecutionPolicy Không hạn chế

Nhưng điều này không hiệu quả. Nó bị giới hạn. Có lẽ chính sách bảo mật mới cho Windows10. Tôi đã gặp lỗi này:

Set-ExecutionPolicy: Windows PowerShell đã cập nhật chính sách thực thi của bạn thành công, nhưng cài đặt bị ghi đè bởi chính sách được xác định ở phạm vi cụ thể hơn. Do ghi đè, trình bao của bạn sẽ giữ nguyên chính sách thực hiện hiệu quả hiện tại của ...

Vì vậy, tôi tìm thấy một cách khác (dung dịch):

  1. Mở Command / Console (Thắng lợi + R)
  2. Kiểu: gpedit.msc (Chính sách nhóm Trình chỉnh sửa)
  3. Duyệt đến Chính sách máy tính cục bộ -> cấu hình máy tính -> mẫu hành chính -> Các thành phần Windows -> Windows Powershell.
  4. Bật "Bật thực thi tập lệnh"
  5. Đặt chính sách nếu cần. Tôi đặt tôi thành "Cho phép tất cả tập lệnh".

Bây giờ mở PowerShell và thưởng thức;)


16
2017-09-01 09:32



Đây có phải là bản cài đặt độc lập hay bạn đã kết nối với nhóm làm việc hoặc tên miền không? - MEMark
Tại sao mở cmd để làm điều đó? Chỉ cần mở ISE (dưới dạng quản trị viên) và nhập Set-ExecutionPolicy RemoteSigned - Kolob Canyon


Chúng ta có thể có được trạng thái hiện tại ExecutionPolicy 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 các kịch bản PowerShell, chúng ta cần thiết lập ExecutionPolicy này hoặc là 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. Bỏ qua ExecutionPolicy thoải mái hơn Unrestricted.


10
2017-09-07 07:00



Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;  AKA cách nhanh chóng và bẩn thỉu để nói với VS2015 ngừng phàn nàn và chạy kịch bản đẫm máu của tôi. cảm ơn. phao cứu sinh. - Eon
Yup, điều này sẽ cao hơn vì một số tập lệnh không được ký kỹ thuật số - Gaspa79


Thiết lập chính sách thực hiện là môi trường cụ thể. Nếu bạn đang cố gắng thực thi một kịch bản từ x86 đang chạy ISE bạn phải sử dụng PowerShell x86 để đặt chính sách thực thi. Tương tự, nếu bạn đang chạy ISE 64 bit, bạn phải đặt chính sách bằng PowerShell 64 bit.


9
2017-08-25 00:33



Điều này là tốt để biết. Nó không tài liệu tốt rằng nó là môi trường cụ thể! - Chad Carisch