【问题标题】:"PowerShell on Target Machines" task fails with an error in TFS 2017\Azure Dev Ops“目标计算机上的 PowerShell”任务失败,并在 TFS 2017\Azure Dev Ops 中出现错误
【发布时间】:2020-03-08 07:14:41
【问题描述】:

我正在尝试使用我的 TFS 构建定义中的“目标计算机上的 PowerShell”任务来运行其中一台 azure 服务器上的 PowerShell 脚本,但任务失败并出现以下错误。

System.Management.Automation.RuntimeException:正在运行的命令 由于首选项变量“ErrorActionPreference”或 常用参数设置为Stop:指定路径、文件名,或 两者都太长了。全限定文件名必须小于 260 字符,并且目录名称必须少于 248 个字符。 --->

我已将脚本复制到 F 盘,但它仍然给出路径太长的错误,无法找到任何解决方案。

有人知道是什么原因吗?

还添加了脚本代码以供参考,

GetLatestDebugOutput.ps1

$DebugBuildOutput = "F:\Drops\econNextGen\SecurityScan\19.0"
$Dest = "F:\Drops\econNextGen\SecurityScan\Debug Build Output"


Remove-Item "$Dest\*" -Recurse -Force

#Code to Copy Common-App Debug Build
$Dir= $DebugBuildOutput + "\econNextGen-Common-App-Debug\"
$Latest = Get-ChildItem -Path $Dir | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$FolderPath= $Dir +$Latest.Name 
Copy-Item -Path $FolderPath $Dest –Recurse -force


#Code to Copy Main-App Debug Build
$Dir= $DebugBuildOutput + "\econNextGen-MAIN-APP-Debug\"
$Latest = Get-ChildItem -Path $Dir | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$FolderPath= $Dir +$Latest.Name 
Copy-Item -Path $FolderPath $Dest –Recurse -force

【问题讨论】:

  • 你能分享你试图运行或目标机器的 .ps1 文件吗?和/或构建设置页面截图?
  • 根据我使用 powershell 执行 TFS 的经验,如果您的脚本路径错误或不可接受(我的意思是这个;运行命令停止,因为首选项变量“ErrorActionPreference”或公共参数是设置为 Stop )这就是为什么文件中的脚本可能是一个重要案例
  • @JimErginbash 我已经在目标机器任务上分享了ps脚本和powershell以供参考。

标签: powershell azure-devops azure-pipelines azure-pipelines-build-task


【解决方案1】:

首先建议您直接 RDP 到远程目标机器并检查您是否能够在其中运行相同的脚本。如果问题与您的 tfs 构建定义和环境有关,这将缩小范围。

对于环境,请确保您已满足此PowerShell on Target Machines task 的所有先决条件。并且您已经安装了合格的 powershell 版本。

实际上,错误消息非常简单,您应该注意的关键点也是如此:确保您没有使用太长的路径或使用无效的路径。如果申请所有文件夹和文件。

此外,尝试使用system.debug=true 启动build with diagnostics\debug enabled,看看是否可以获得任何有意义的输出以供将来进行故障排除。

【讨论】:

  • 我能够进行 RDP 并且还能够运行脚本,实际上脚本是在目标服务器本身上创建的。通过在 azure 服务器上配置 WinRM HTTPS 协议并在其上打开端口 5986 来启用所有先决条件。以前,即开头的路径是“F:\Drops\econNextGen\SecurityScan\GetLatestDebugOutput.ps1”,后来我在收到路径太长错误后更新为“F:\GetLatestDebugOutput.ps1”。但它仍然没有成功并继续给出这个错误。另外,我使用调试模式执行了构建,但仍然没有任何意义。
  • 大家好,我认为问题出在 PowerShell 脚本上,因为现在我尝试执行另一个演示脚本,它成功执行,没有任何错误。但是,如果我尝试手动运行以前的 ps 脚本,它确实可以正常工作,但在目标机器上执行 CI PowerShell 任务失败。
  • @SRP 感谢您的快速回复。是的,根据您的描述,它应该与您的脚本有关。再次浏览您的脚本后,我想知道它是否与$FolderPath= $Dir +$Latest.Name 这句话有关。 $Dir= $DebugBuildOutput + "\econNextGen-MAIN-APP-Debug\"$DebugBuildOutput = "F:\Drops\econNextGen\SecurityScan\19.0",你有三个级别。请尝试缩短您的 FolderPath。它可能会奏效。
  • 实际上上面的代码是正确的,但问题是在复制一个文件的过程中,该文件的路径太长,PowerShell 无法复制,因此它抛出错误为“它找不到路径”。这是由于路径长而无法复制的文件。 "F:\Drops\teconNextGen\SecurityScan\19.0\teconNextGen-Main-WEB-HTML5-Debug\teconNextGen-Main-WEB-HTML5-Debug_20191112.1\app\inventory\inventory-model\tecon-inventory-model-page- activity-view-layout-tab\recon-inventory-model-page-activity-view-layout-tab.component.js"
  • 所以,为了解决这个问题,我简单地创建了我需要复制的所有文件的 zip,然后将 zip 复制到目标文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2021-12-09
  • 2017-06-26
  • 2018-04-06
相关资源
最近更新 更多