从命令行忽略“安全警告”运行脚本


74

我正在尝试从我信任的共享文件夹中执行脚本:

PowerShell -file "\\server\scripts\my.ps1"

但是我收到安全警告,必须按“ R”键才能继续

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

我可以忽略此警告吗?我想要的伪代码是:

PowerShell -IGNORE_SECURITY_WARNING -file "\\server\scripts\my.ps1"

Answers:


86

Lee Holmes博客上的 标准映像中的PowerShell执行策略”Windows Power Shell博客上的“ PowerShell的安全指导原则”都对此进行了说明

简介 一些机器将UNC路径视为严重的互联网,因此PowerShell将它们视为远程文件。您可以在那些服务器(UncAsIntranet = 0,)上禁用此功能,也可以将远程计算机添加到受信任的主机。

如果您不想执行任何操作,那么PowerShell v2支持一个-ExecutionPolicy参数,该参数完全可以执行您的伪代码想要的操作。PowerShell -ExecutionPolicy Bypass -File (...)


4
谢谢!-ExecutionPolicy绕过正是我想要的。
alex2k8

1
@LeeHomes我在寻找其他东西,但-ExecutionPolicy ByPass解决了我的问题。您为我节省了很多搜索时间和时间。谢谢
Suhas 2013年

2
需要澄清的是-“添加到受信任的主机”是指系统的Internet选项,可通过控制面板或Internet Explorer访问。该名称似乎是字符串匹配。我的名字是\\foo-files。将名称添加foo-files.example.com到受信任的主机不起作用,我只需要添加名称foo-files
Dan Pritts 2014年

回复:-ExecutionPolicy该命令仅将正在运行该脚本的实例列入白名单,而对那些在PowerShell ISE中使用“运行”按钮的运行脚本没有帮助。有没有一种方法可以全局信任此文件:1.持久-和-2.不涉及执行脚本。进一步警告...更改域上的本地Intranet区域和/或受信任区域可能会对依赖特定浏览器功能的网站产生意外影响。例如,可以明确阻止ActiveX,http和ws通信,具体取决于源与区域。
tresf

我在哪里放置这个UncAsIntranet?
McVitas

48

为避免警告,您可以:

Set-ExecutionPolicy bypass

4
警告:这会在整个计算机上设置ExecutionPolicy,这是很大的安全风险。上面的@LeeHolmes解决方案仅针对该会话设置ExecutionPolicy,这具有较低的风险。
JamesQMurphy 2014年

我发现安全隐患令人生畏,但这是我发现使用PowerShell ISE编辑远程文件并且每次单击运行按钮时都没有弹出窗口的唯一方法……至少在不更改Internet Security设置的情况下- -在目标环境的情况下-会破坏ActiveX内容以及一些只能在默认的本地Intranet区域中工作的,选择不当但需要的跨域安全设置。
tresf

43

如果您从下载的Powershell脚本中遇到此错误,则可以通过以下方式取消阻止脚本:

  1. 右键单击有问题的.ps1文件,然后选择“属性”

  2. 在文件属性中单击取消阻止

    在此处输入图片说明

  3. 点击确定


2
谢谢!!这对我有用,即使没有限制执行Set-ExecutionPolicy,系统也会在每次启动时提示我
Choco Smith

2
至少在我的机器上,Unblock-File似乎没有原始问题所示的UNC路径帮助,该Unblock按钮也没有出现在文件的属性对话框中。我认为这是因为您的文件托管在本地C:\...,这使该答案对于原始问题无效(尽管对其他=> 28个有用)
tresf

1
绝对对我有帮助。由于我们环境的限制,我们不得不手动安装模块(stackoverflow.com/a/37488195/74276),然后将它们安装在服务器上(docs.microsoft.com/en-us/powershell/scripting/developer/module / ...) 。然后,我们发现必须运行“ Get-ChildItem | Unblock-File”才能取消阻止模块文件夹(在版本号文件夹下)中的所有文件。
Kirk Liemohn '20

13

只需将1分配给SEE_MASK_NOZONECHECKS环境变量

$env:SEE_MASK_NOZONECHECKS = 1
Start-Process $msi_file_path /qn -Wait | out-null

2
Start-Process不支持,-ExecutionPolicy Bypass因此即使禁用了UAC,它也无法在UNC路径上运行。但是有了这个技巧,它就可以了。用我的双手进行投票。
Laurent Caillette '17

先生,您赢了晚上。
ojblass

3

试试这个,用以下命令编辑文件:

notepad foo.ps1:Zone.Identifier

并设置“ ZoneId = 0”


4
或者,在V3中,Unblock-File(尽管此注释和此答案都与IO的问题无关)
Ruben Bartelink 2012年

出于某种原因,Unblock-File即使使用v4 ,我也看不到,但是Zone.Identifier解决方法可以解决问题。该文件也是在主机上创建的,但仍然带有系统执行策略“ RemoteSigned”的提示。
LeeM


3

我制作了此powershell脚本来解除阻止服务器上共享上的所有文件

Get-ChildItem "\\ServerName\e$\MyDirectory\" -Recurse -File | % {
       Unblock-File -Path $_.FullName
}

Unblock-File在我的测试中不起作用(Windows 10,PowerShell ISE)。
tresf

2

您要使用Set-ExecutionPolicy在计算机上设置执行策略:

Set-ExecutionPolicy Unrestricted

您可能需要研究各种执行策略,以查看哪种策略适合您。查看“ help about_signing”以获取更多信息。


这将永久更改执行策略,一次性使用可能也不希望这样做。
乔伊(Joey)2010年

3
将ExecutionPolicy设置为Unrestricted可以执行网络脚本,但不会绕过提示。
Yevgeniy

2
您要使用“绕过”而不是“不受限制”。“绕过”甚至比“不受限制”具有更少的限制,并且摆脱了安全提示。
沃伦·史蒂文斯

1

您是否从互联网下载了脚本?

然后在命令行上使用sysinternal的streams.exe从文件中删除NTFS流。

cmd> streams.exe .\my.ps1

现在尝试再次运行脚本。


4
或者,在V3中,Unblock-File(尽管此注释和此答案都与IO的问题无关)
Ruben Bartelink 2012年

0

假设您需要从共享文件夹启动ps脚本

copy \\\server\script.ps1 c:\tmp.ps1 /y && PowerShell.exe -ExecutionPolicy Bypass -File c:\tmp.ps1 && del /f c:\tmp.ps1

PS减少谷歌搜索)


0

如果您有很多ps1文件,则操作非常简单,打开PowerShell并编写以下命令。在这里,您必须使用自己的路径更改路径。

PS C:\Users> Get-ChildItem -Path "D:\downlod" -Recurse | Unblock-File

没有。文件没有被阻止,当我通过ISE从\\ tsclient \ h运行文件时,我仍然得到提示
McVitas

0

尝试使用set-executionpolicy“ Policyname” -force开关,警告弹出窗口不应出现。


0

对于那些想要从已加载的PowerShell会话访问文件的用户,请使用Unblock-File文件标记为安全(尽管您已经需要像这样设置宽松的执行策略Unrestricted才能起作用),或者更改执行策略仅用于当前的PowerShell会话:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.