我们的基础架构中有许多 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://www.leeholmes.com/blog/2008/07/24/powershell-execution-policies-in-standard-images/