我们的基础架构中有许多用于各种任务的 powershell 脚本,从用户登录到支持技术人员模拟用户上下文。
这些脚本集中在我们的文件服务器上(通过 DFS),以便于管理。其中一些在登录时运行,一些通过已发布的 Citrix 应用程序运行。
我们为整个域和所有用户应用了一项策略,将 Powershell 执行策略设置为“无限制”,以便脚本可以从文件服务器运行。
这对于登录脚本(至少到目前为止)非常有效,但对于稍后运行的脚本(通常通过已发布的应用程序,但在使用终端服务和完整桌面时同样适用),结果不一致:一些用户可以运行脚本很好,在 powershell 控制台中总是提示一些让脚本运行。
我找不到任何可能导致这种行为的东西,而且确实不一致:如果我手动启动 powershell 并运行get-executionpolicy
,我被告知当前策略是unrestricted
. 然而,如果在同一个会话中,我尝试通过调用的程序运行脚本,powershell <script file name> <parameters>
我会在脚本运行之前得到提示。
什么可能导致这种行为?
我猜你看到的提示是这样的:
如果您运行“get-help about_execution_policies”,您将看到“无限制”的行为定义为:
即使设置为无限制,PowerShell 也会提示您运行它认为是从 Internet 下载的脚本——这可能包括从 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/