什么原因导致 Powershell 执行策略不被考虑?

什么原因导致 Powershell 执行策略不被考虑?

我们的基础架构中有许多 powershell 脚本,用于各种任务,从用户登录到支持技术人员模拟用户环境。

这些脚本集中在我们的文件服务器上(通过 DFS),以便于管理。其中一些在登录时运行,一些通过已发布的 Citrix 应用程序运行。

我们已经为整个域和所有用户应用了一项策略,将 Powershell 执行策略设置为“不受限制”,以便脚本可以从文件服务器运行。

这对于登录脚本来说运行得很好(至少到目前为止),但对于稍后运行的脚本(通常通过已发布的应用程序,但在使用终端服务和完整桌面时同样适用),结果不一致:有些用户可以正常运行脚本,有些用户总是在 powershell 控制台中提示让脚本运行。

我找不到任何可能导致此行为的原因,而且它确实不一致:如果我手动启动 powershell 并运行get-executionpolicy,系统会告诉我当前策略是unrestricted。但是,如果我从同一会话尝试通过调用 的程序运行脚本,powershell <script file name> <parameters>则会在脚本运行之前提示我。

什么可能导致这种行为?

答案1

我猜你看到的提示是这样的:

Security Warning Run only scripts that you trust. While scripts from the Internet can be useful, this script can potentially harm your computer. Do you want to run \server\scripts\my.ps1? [D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"): d

如果您运行“get-help about_execution_policies”,您将看到“Unrestricted”的行为定义为:

 Unrestricted
 - Unsigned scripts can run. (This risks running malicious
   scripts.)

 - Warns the user before running scripts and configuration
   files that are downloaded from the Internet.

即使设置为“不受限制”,PowerShell 也会提示您运行它认为是从互联网下载的脚本 - 这可能包括从 UNC 路径调用的脚本。您可以通过调整计算机上的 Internet Explorer 安全区域(是的,真的)和/或使用 caspol.exe 在系统上配置 .NET 代码访问安全策略来调整行为。

如果这确实是您看到的提示,这里有一些有用的链接:

http://blogs.msdn.com/b/powershell/archive/2007/05/06/running-scripts-downloaded-from-the-internet.aspx

http://www.leeholmes.com/blog/2008/07/24/powershell-execution-policies-in-standard-images/

http://powertoe.wordpress.com/2010/08/10/corporate-powershell-module-repository-part-1-design-and-infrastructure/

相关内容