PowerShell为了防止恶意的PowerShell代码在计算机执行,在PowerShell 5.1 后的版本中Power-Shell的默认运行环境是RemoteSigned,就是经过远程验证过的PowerShell脚本能够执行。
在实际的脚本应用过程中,我们经常会将策略修改为Unrestricted,这其实是一种非常危险的行为,在企业内如果是经常使用的脚本,建议使用证书完成脚本签名操作。在进行PowerShell脚本执行过程中包含了如下的不同策略。执行策略修改的时候需要注意,当前开启的PowerShell 是不是以管理员模式开启,如果不是以管理员模式开启,则会提示如图2.19所示的权限不足的情况。
图2.19 不以管理员模式修改会出现权限不足的错误
当我们设置所有的执行策略之后,所有的代码均会验证是否经过可信任的证书颁发者签名,所有经过签名的用户将被允许执行。没有经过数字签名的脚本会出现如图2.20所示的提示,将不允许执行没有经过签名的脚本。
图2.20 如果脚本没有经过签名则不允许执行
当执行策略设置为ByPass的时候,所有代码均执行,并且不会有任何提示。
当执行策略设置为默认策略时,Windows 客户端系统将不允许执行脚本,服务器端执行的脚本使用RemoteSigned策略。
所有PowerShell 脚本在执行之前都需要经过数字签名,默认的服务器执行策略就是RemoteSigned。
如果执行策略是Restricted,则我们不会执行任何一个脚本,默认的所有Windows 客户端的策略都是Restricted。所有的执行范围可以定义的策略如果都没有定义,则Windows 客户端的执行策略就是Restricted。
一般自己编写的代码不会通过可信任发布者验证,这时为了让我们的脚本顺利执行,通常需要将策略设置为Unstricted。从PowerShell 6.0开始,非Windows系统默认为Unstricted并且不可以更改。Windows系统设置为Unrestricted执行策略后,所有执行的脚本在执行过程中会提示,但不会阻止脚本的执行。