我在 Citrix/2008R2 中有一个应用程序,它充当其他应用程序的用户起点。
我最近不得不修改此应用程序,以便将其与 Active Directory 更深入地集成。作为此过程的一部分,应用程序有时必须直接运行用户登录脚本(而不是依靠登录过程来执行此操作)。
该脚本是用 powershell 编写的,除其他外,它还根据帐户对象所在的 OU 映射用户驱动器。我必须修改脚本以考虑到那些在登录时必须选择其工作环境的用户,因此不能使用标准登录脚本。
无论如何:我的问题是,当从我的应用程序的 DFS UNC 路径启动脚本时,它无法运行,并要求用户确认其执行。我检查了 32 位和 64 位 powershell 中的执行策略,它们是这样的:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Unrestricted
UserPolicy Unrestricted
Process Undefined
CurrentUser Undefined
LocalMachine Unrestricted
现在,我已将脚本复制到临时文件夹并从那里运行它(它工作正常)但它困扰着我:我看不出 powershell 拒绝执行该脚本的任何逻辑原因。
有人知道这里发生了什么事吗?
编辑
为了澄清起见,我在这里遇到了常见的 powershell 安全警告:
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 \\xxxx\xxxx\xxxx\test_powershell.ps1?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"):
答案1
此 powershell 博客文章详细介绍了 powershell 如何根据 RemoteSigned 执行策略确定脚本是否为远程脚本。我发现,即使将策略设置为“不受限制”,如果 powershell 认为脚本是远程脚本,您仍会收到执行提示。因此,正如 tchester 所说,这可能与您的 IE 安全区域有关。我想我已经解决了 caspol.exe 的类似问题。
这里这是我找到的一些关于如何使用 capol.exe 完全信任共享的说明。我有一段时间没弄这个了,所以请使用 caspol 和 powershell 进行测试,但我非常有信心这将解决您看到的提示问题。