目标机器上的 PowerShell -TFS 任务,在远程服务器中更改执行策略后安全警告仍然存在

Posted

技术标签:

【中文标题】目标机器上的 PowerShell -TFS 任务,在远程服务器中更改执行策略后安全警告仍然存在【英文标题】:PowerShell on Target Machines -TFS task, Security Warning persists after changing execution policy in remote server 【发布时间】:2021-06-10 15:27:21 【问题描述】:

我很担心,因为我无法弄清楚我发布的目标机器任务(v1.0 和 2.0)上的 powershell 会发生什么。 每次我运行任务时,它都会向我抛出错误:

 AuthorizationManager check failed. ---> System.Management.Automation.PSSecurityException: AuthorizationManager check failed. ---> System.Management.Automation.Host.HostException: A command that prompts the user failed because the host program or the command type does not support user interaction. The host was attempting to request confirmation with the following message: Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run \\server\c$\Program Files\exampleps.ps1?

我知道这可能与执行策略有关,所以这是我迄今为止尝试解决问题的方法:

    我进入远程服务器并为管理员关闭了 IE 增强安全性,因为运行此脚本的服务帐户是 admin Shift+右键单击 powershell 以作为服务帐户运行并将执行策略从远程签名更改为绕过。在 32 位和 64 位 powershell 中执行此操作。绕过设置为本地计算机和当前用户 将 \server\c$\Program Files\exampleps.ps1 添加到 Internet 选项下的受信任站点

我曾尝试 google 和 *** 类似的问题,这些都是我发现的。

更新

在尝试了上述所有 3 种方法后,即使我尝试直接在控制台中运行 ps 脚本,安全警告仍然出现。由于某些原因,绕过执行策略没有启动。 --我能够在控制台中运行它而没有警告,但是,tfs 任务仍然失败

我真的很沮丧,我希望社区中的任何人都可以在这方面给我一些指导。

非常感谢。

【问题讨论】:

你能试试看运行 unblock-file -path "" 会发生什么 我确实尝试了 unblock-file -path cmdlet,它允许我在控制台中执行脚本而不会发出警告。但是,发布的远程机器上的powershell任务仍然失败。 似乎绕过执行启动了,所以我可以使用服务帐户在控制台中运行 ps 脚本而不会发出警告,但 TFS 发布任务仍然由于同样的原因失败...... 【参考方案1】:

请尝试以下方法,看看是否可行:

    使用“绕过”执行策略标志

    PowerShell.exe -ExecutionPolicy Bypass -File \server\c$\Program Files\exampleps.ps1
    

    从文件和管道中读取脚本到 PowerShell 标准输入

    Get-Content \server\c$\Program Files\exampleps.ps1 | PowerShell.exe -noprofile -
    

    使用 Invoke-Expression 命令

    Get-Content \server\c$\Program Files\exampleps.ps1 | Invoke-Expression
    

    使用“无限制”执行策略标志

    PowerShell.exe -ExecutionPolicy UnRestricted -File \server\c$\Program Files\exampleps.ps1
    

您还可以尝试其他几种方法。查看更多详情,可以参考“15 Ways to Bypass the PowerShell Execution Policy”。

【讨论】:

我在想这个警告是从哪里来的,因为我已经在目标机器中设置了执行策略作为绕过本地机器和管理员帐户。代理位于另一个 RM 中,并且对其他服务器没有此类问题。它只是在 1 台服务器中存在此问题,目标机器上的 Powershell (v1.*) 使用 UNC 路径调用脚本(位于另一台服务器中),因此这些内联命令可能有效,但不适用于我的情况。谢谢你。 您好@Wei,您可以尝试在代理机器上直接调用同一个PowerShell脚本文件。如果返回相同的警告,则警告应该来自代理机器系统的策略。如果警告不是在代理机器上而是在管道中发生,则警告可能来自 TFS 服务器的策略。通常,Azure DevOps 会在运行管道时将默认安全策略应用于代理。 感谢您提供的信息。我厌倦了直接在代理机器上运行 powershell 脚本,它在没有警告的情况下启动了这个过程。就您而言-“警告可能来自 TFS 服务器的策略”,它是否只影响 1 台服务器?我目前对其他环境有类似的任务设置,它们都顺利完成。如果是这样,您在 TFS 服务器中的明确策略是什么?非常感谢。 继续之前的评论,这与服务器配置有关吗? 您好@Wei,在管道中使用 PowerShell 任务时可能会应用该策略。在调用脚本文件之前使用命令 Unblock-File script_name.ps1 怎么样?

以上是关于目标机器上的 PowerShell -TFS 任务,在远程服务器中更改执行策略后安全警告仍然存在的主要内容,如果未能解决你的问题,请参考以下文章

使用 Powershell 从任务管理器中检索信息

Powershell - 运行位于远程机器上的脚本,该脚本反过来从网络共享访问文件

为啥这个SQL Server DBA学习PowerShell

通过Powershell PSSession调用invoke-wmimethod而不是远程机器上的管理员?

如何用PowerShell列出你机器上的.NET Framework的版本号和SP服务补丁

PowerShell小技巧:通过Powershell 发送消息给企业微信机器人