恢复有关脚本的 PowerShell 警告

恢复有关脚本的 PowerShell 警告

我发现了几个关于如何抑制此类警告的问题:

安全警告 仅运行您信任的脚本。虽然来自 Internet 的脚本很有用,但此脚本可能会损害您的计算机。是否要运行 .\myscript.ps1?[D] 不运行 [R] 运行一次 [S] 暂停 [?] 帮助(默认为“D”):

但我遇到了相反的问题。它神秘地消失了,我想找回它。我无法完全控制机器,所以可能有些东西在我不知情的情况下发生了变化。我的执行策略目前设置为Restricted,但在运行时我没有看到任何警告powershell -ExecutionPolicy Unrestricted -File .\myscript.ps1,尽管我以前经常看到它。

我为何想要把它拿回来?

有问题的机器是客户提供的测试机器。在更上层(在准备和生产环境中),我预计会出现此警告,因此我希望配置我的测试机器,以便我也能在那里看到它。好吧,至少通常如此。我的工作通常只需要回答是或抑制它,但出于测试目的,我希望测试机器尽可能像准备和生产机器一样。

我至少想知道发生了什么变化,这样我就能知道它是否会影响登台和生产,所以任何关于可能是什么的建议都会有所帮助。

答案1

@Jscott 说得对,这是 Zone.Identifier 备用 NTFS 数据流与 Powershell 的执行策略相结合导致出现此消息。只有这两个因素结合在一起才导致出现此消息。

“我无法完全控制这台机器,所以有可能在我不知情的情况下发生了变化。”

一台机器有几种不同的 Powershell 执行策略。默认情况下,如果您只输入Get-ExecutionPolicy,则只会显示当前用户的执行策略。

PS C:\users\ryan> Get-ExecutionPolicy -List

Scope               ExecutionPolicy
-----               ---------------
MachinePolicy       Undefined
UserPolicy          Undefined
Process             Undefined
CurrentUser         Undefined  
LocalMachine        Unrestricted

通过执行Set-ExecutionPolicy Unrestricted -Scope LocalMachine,您可以更改该计算机所有用户的执行策略。我没有看到您在帖子中做出这种区分,所以我想您可能没有意识到这一点。

如果您没有该机器的管理员权限,则您将无法更改 LocalMachine 执行策略。

故事的另一半是 Zone.Identifier 备用流。如果文件没有此备用数据流,您将不会看到此消息。

您提到您通过 WinSCP 下载这些脚本。对于从网络位置下载的文件,如果要包含此备用数据流,则必须由 Zone.Identifier ADS 兼容应用程序下载,例如现代 Web 浏览器或 Windows 资源管理器。WinSCP 不是这些应用程序之一。

这就是为什么我认为 NTFS 备用数据流没有得到广泛使用的原因——因为如果文件没有以正确的方式传输,很容易丢失备用数据流。尽管它们对于存储元数据非常有用。

所以现在让我们解决你的问题。为什么不重建脚本上的备用数据流,以便 Powershell 再次认为你从互联网上下载了这个东西?事实上,你缺少 ADS,这就是为什么你看不到安全警告或解除阻止按钮。

查看 ADS(并确认其中没有任何内容,且为空白)

C:\> more < script.ps1:Zone.Identifier:$DATA

要覆盖它:

C:\> echo [ZoneTransfer] > script.ps1:Zone.Identifier:$DATA

并添加第二行:

C:\> echo ZoneId=3 >> script.ps1:Zone.Identifier:$DATA

因此,当您输入以下内容时,整个 ADS 应如下所示:

C:\>more < script.ps1:Zone.Identifier:$DATA
[ZoneTransfer]
ZoneId=3

Windows 和 Powershell 现在会再次认为您从互联网上下载了该文件。

编辑:哦,最后我想提醒你一件事。这些“ZoneId”……它们对应于可在 Internet Explorer 中配置的安全区域(Int​​ranet、受信任的站点、Internet 等)。因此,如果管理员对这些 IE 安全区域进行了一些重大修改,那么这也会对 Windows 视为“潜在有害”的文件产生影响。

相关内容