TFS2015目标计算机上的Powershell - 在发布过程中设置变量/在远程服务器上查找空闲端口

时间:2016-11-01 16:52:46

标签: powershell tfs azure-devops

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

我还尝试使用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"

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这是正确的脚本。我只是使用正常的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

enter image description here

答案 2 :(得分:0)

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

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