获取关于脚本的PowerShell警告

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

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

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

我为什么要回来?

有问题的机器是由客户提供的testing机器。 在链(在分段和生产环境中),我期待这个警告出现,所以我想我的testing机器被configuration,以便我也可以在那里。 那么,至less通常是这样。 我的工作通常只需要回答是或抑制,但为了testing的目的,我希望testing机器尽可能地像舞台和生产机器一样。

我至less想知道是什么改变了,所以我可以找出是否会影响舞台和制作,所以任何build议可能会有所帮助。

@Jscott是正确的,这是Zone.Identifier备用NTFS数据stream,加上Powershell的执行策略,导致此消息。 这些是导致这个消息发生的唯一的两件事情。

“我没有完全控制这台机器,所以有可能在我不知情的情况下改变。

一台机器有几个不同的Powershell执行策略。 默认情况下,如果只inputGet-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 ,可以更改该机器所有用户的执行策略。 我没有看到你在post中作出这样的区分,所以我想你可能没有意识到这一点。

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

故事的另一半是Zone.Identifier替代stream。 如果文件没有这个备用数据stream,则不会看到此消息。

你提到你通过WinSCP下载这些脚本。 对于从networking位置下载的包含此备用数据stream的文件,它必须已由Zone.Identifier ADS兼容应用程序(如现代Web浏览器或Windows资源pipe理器)下载。 WinSCP不是这些应用程序之一。

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

现在我们来解决你的问题。 为什么不在脚本上重build备用数据stream,以便Powershell再一次认为你是从网上下载的东西呢? 您错过了ADS的原因是您没有看到安全警告或取消阻止button的原因。

要查看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中可configuration的安全区(Intranet,可信站点,Internet等)。 因此,如果pipe理员对这些IE安全区域进行了大量修改,那么Windows也会将其视为“潜在有害”文件。