我想从部署服务器获得一个免费端口。为了实现这一点,我运行了这个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"
或者是否有更好的方法可以在远程部署目标上找到空闲端口?
答案 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
答案 2 :(得分:0)
对于需要解决方案从“目标计算机上的PowerShell”任务设置构建/发布变量的人来说,这对我有用:
Write-Verbose ("##vso[task.setvariable variable=SomeVariable]{0}" -f $theValue) -verbose