TFS2015 Powershell on Target Machine - 在发布过程中设置变量/在远程服务器上查找空闲端口

Posted

技术标签:

【中文标题】TFS2015 Powershell on Target Machine - 在发布过程中设置变量/在远程服务器上查找空闲端口【英文标题】:TFS2015 Powershell on Target Machine - Set a variable in the release process / Find a free port on a remote server 【发布时间】:2016-11-01 16:52:46 【问题描述】:

我想从我的部署服务器获得一个空闲端口。为了实现这一点,我运行了这个 powershell 脚本,并且我想在我的发布过程中设置传入的变量。是否有一个好的解决方案可以在我的发布过程中设置一个在远程服务器上计算的变量(在这种情况下是部署目标)。

我也尝试使用 write-host 来设置变量,但脚本在我的发布过程中崩溃了..

Param(
  [string]$variableName
)
$port = 1000
for($i=1000;$i -le 65000;$i++)
      $free = netstat -o -n -a | findstr ":$i"
      IF([string]::IsNullOrEmpty($free))  
          $port = $i
          break;
             

Write-Output "##vso[task.setvariable variable=$variableName]$port"

或者有没有更好的方法在远程部署目标上找到空闲端口?

【问题讨论】:

【参考方案1】:

对于任何需要解决方案来从“目标机器上的 PowerShell”任务设置构建/发布变量的人,这对我有用:

Write-Verbose ("##vso[task.setvariable variable=SomeVariable]0" -f $theValue) -verbose

【讨论】:

【参考方案2】:

根据我的测试,设置变量在 PowerShell On Target Machine 任务中不起作用。

您可以将变量值存储在文件中,然后从该文件中读取数据。

【讨论】:

我 dont think that this is the best idea.. Im 正在编写一个 powershell 脚本,该脚本直接向远程服务器请求网络绑定【参考方案3】:

这是正确的脚本。我只是使用普通的 powershell 任务并运行以下脚本,就可以正确设置变量。

Param(
  [string]$remoteServer,
  [string]$variableName
)
Write-Host "Parameters: Server: " $remoteServer
$port = 80
$usedPorts = invoke-command -ComputerName $remoteServer -ScriptBlock  return Get-WebBinding  
Write-Host "Got Ports: $usedPorts"
for($i=8000;$i -le 65000;$i++)
      $free = $usedPorts | findstr ":$i"
      IF([string]::IsNullOrEmpty($free))  
          $port = $i
          break;
             

Write-Host "Found port: " $port
Write-Host "##vso[task.setvariable variable=$variableName;]$($port)"
exit 0

【讨论】:

以上是关于TFS2015 Powershell on Target Machine - 在发布过程中设置变量/在远程服务器上查找空闲端口的主要内容,如果未能解决你的问题,请参考以下文章

TFS2015 构建定义 Powershell 错误

TFS 2015 On Premise - 更改浏览器中新文件的默认编码

TFS中的Robocopy构建PowerShell步骤报告失败但没有错误

使用Git LFS和TFS 2015 Update 2 On Premise

PowerShell 和 TFS |使用本地路径与使用服务器路径的 PowerShell ISE 从 TFS 获取更改集列表

TFS 2017 - 从 TFS 服务器而不是代理运行 powershell 脚本