6

我有两台服务器在同一个域上运行 Windows Server 2012 R2,\tt-sql.perf.corp 和 \tt-file.perf.corp。在文件服务器的共享文件夹\tt-file.perf.corp\fileshare\helloworld.ps1 中有一个Powershell 脚本。我在执行以下命令的 sql server 上有一个应用程序:

powershell -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& '\tt-file.perf.corp\fileshare\helloworld.ps1'"

它失败并出现以下错误:

& : AuthorizationManager 检查失败。在 line:1 char:3 + & '\tt-file.perf.corp\fileshare\helloworld.ps1' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess

如果我更改路径以使用 IP 地址,它也会失败。

但是,当脚本的路径不完全限定时,它可以工作: powershell -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& '\tt-file\fileshare\helloworld.ps1'"

Windows Management Instrumentation 服务在两台服务器上运行。我也在两台服务器上运行了 Get-ExecutionPolicy,并且都设置为 Unrestricted。两台服务器上都禁用了 UAC。这是怎么回事?

4

1 回答 1

7

看来您已经找到了解决方法(使用短名称与 FQDN),所以我将尝试回答您为什么首先遇到这个问题。

在这篇博文中可以找到一些更大的内容;实际上,这种情况正在发生,因为当您为服务器指定 FQDN 时,您正在与 PowerShell / Windows 安全功能之一发生冲突。即使您指定 PowerShell 应该绕过正常的执行策略,从 FQDN 运行也会使 Windows 相信该文件来自网络,因此 PowerShell 想要向您显示如下警告:

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  
\\tt-file.perf.corp\fileshare\helloworld.ps1?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D"):

但它不能,因为您在非交互模式下运行 shell。


所以你有两种选择来解决这个问题,真的:

  1. 正如这篇博文所述,您可以通过将 UNC 路径设置为 IE 中的受信任站点来解决问题,或者仅使用您所看到的短名称(使用 \tt-file\ 与 \tt-file.perf.corp)反而。
  2. 您可以为本地 Intranet 区域使用组策略(或在 IE 中配置,如果这是一台一次性计算机)地址。如果这是一台一次性机器,请转到 Internet Explorer、工具、Internet 选项,然后转到安全选项卡。单击本地 Intranet,高级,然后在此处添加您的 FQDN,如下所示。

为单台计算机配置 FQDN 安全提示解决方法

如果这是您要全局配置的设置,请在组策略管理控制台中的以下位置指定路径,就像我上面所做的那样:

用户配置,展开策略 > Windows 设置 >Internet Explorer 维护 > 安全 3. 双击安全区域和内容分级,然后选择导入当前安全区域和隐私设置。

有关组策略方法的更多信息,请参阅 TechNet 上的此线程。

我希望这有帮助!不幸的是,我想不出一个好的 PowerShell 方法来解决这个问题:)。

于 2015-03-24T21:26:55.253 回答