我充分理解ExecutionPolicy在PowerShell中的工作原理。我见过和做过的大部分内容都是如何禁用它。甚至还有一个命令行标志来禁用它(powershell -ExecutionPolicy Unrestricted ...)。
所以我的问题是为什么,而不是如何。为什么这甚至是一个功能?根据我的经验,这更像是一种错误;对我来说,唯一能做的就是惹恼我,在我看到“无法加载,因为在此系统上禁用脚本的执行”错误,以及我记得-ExecutionPolicy标志时。
为什么 PowerShell会有这样的功能?它就像一个防盗报警器,在前门旁边的建筑物外面有一个开/关开关。
(如果此问题已经通过其他方式得到解答,请道歉)
答案 0 :(得分:4)
回到ActiveX的黑暗时代,如果用户真的想从不受信任的来源运行ActiveX控件,他们就可以这样做。 IE提供的警告是为了阻止用户无意中运行恶意代码而不是阻止该代码在任何情况下运行。最终它是用户的浏览器,用户的计算机,他们应该控制它所做的一切。浏览器只是说'嘿,这可能不好......'
完全相同的原则对Powershell的执行政策起作用。一旦Powershell运行,它就可以访问用户有权访问的所有资源。
完全阻止用户运行脚本是不可能管理的,因为如果他们可以访问PS shell,他们就可以逐行运行脚本中的命令。
作为管理员,通过授予用户对Powershell的访问权限,您相信用户可以运行Powershell代码。无论是以脚本形式,还是通过坐着和黑客攻击PS提示。
执行策略的概念是确保脚本来自谁的方法。如果用户已将适当的证书安装到计算机上,并使用它签署了脚本,则Powershell将信任该脚本。 Powershell将信任该脚本,因为用户信任该证书,因为该证书位于用户证书存储区中。如果该用户然后运行被认为受信任但未被可信证书签名的脚本,则它将警告用户该脚本不受信任。
到达可以运行未经授权的流程的阶段
PowerShell.exe –ExecutionPolicy Bypass –File c:\temp\bad-script.ps1
您已经丢失了机器。如果用户运行此操作,则遵循允许该用户运行恶意ActiveX的相同原则,将允许他们运行恶意Powershell脚本。
Powershell只会警告你要做一些愚蠢的事情。它无法阻止一个坚定的白痴。
这主要是从here
重写(被盗)将它包装在你的比喻中。一旦窃贼越过你的电围栏,武装警卫和野蛮的狗,你不妨让他们按下按钮关闭闹钟。它可以帮助他们将它从墙上撕下并吃掉它。