16

有关该主题的文档仅提供以下内容:

不受限制。加载所有配置文件并运行所有脚本。如果您运行从 Internet 下载的未签名脚本,则会在运行前提示您获得许可。

旁路。没有任何内容被阻止,也没有警告或提示。

对我来说,这两个似乎会接受任何脚本,但令我惊讶的是,事实并非如此。在某些情况下,绕过似乎会阻止执行。

那么,两者有什么区别呢?

4

2 回答 2

20

根据评论,这些执行策略的行为方式应该没有特别的区别。但是Bypass,当您在单次运行期间临时更改执行策略时使用Powershell.exeUnrestricted如果您希望永久更改系统范围之一的执行策略设置(MachinePolicy、UserPolicy、进程、当前用户、本地机器)。

一些例子:

  1. 您在一个系统上,您希望将执行策略更改为永久不受限制,以便任何用户都可以毫无问题地运行任何 PowerShell 脚本。你会运行:

     Set-ExecutionPolicy Unrestricted
    
  2. 您在执行策略阻止您的脚本的系统上,但您想通过 PowerShell 运行它并在运行时忽略执行策略。你会运行:

     powershell.exe .\yourscript.ps1 -executionpolicy bypass
    
  3. 您在执行策略阻止脚本执行的系统上运行 Powershell.exe,但您只想在您所在的交互式 powershell.exe 会话的生命周期内更改此策略。您将运行:

      Set-ExecutionPolicy Bypass -Scope Process
    
于 2018-05-16T13:20:58.650 回答
1

不同之处在于您在问题中给出的描述。Unrestricted 让你沉迷于所有计算机都运行 Windows、只使用 NTFS、只用保存 ADS 的浏览器下载东西的错觉。实际上,如果您将 Windows 中的文件保存到服务器上未使用 NTFS 的 FAT 文件系统或网络共享,或者使用 git 等其他方式下载它,powershell 认为它是本地创建的,无论它来自何处。Bypass 不会检查任何内容,只会运行所有内容。Unrestricted 应该警告您它认为可能有危险但无法可靠检查或确定的事情。使用任何你喜欢的东西。

PS> rm -path file.ps1 -stream zone.identifier
讨论...

于 2019-08-10T16:04:59.563 回答