我正在尝试在PowerShell中设置变量,因此我可以在发布定义中的自定义条件中使用它们,因此我可以防止运行阶段是将VSTS变量设置为false或0
答案 0 :(得分:5)
您需要使用具有特殊字符串格式的Write-Host:
Write-Host "##vso[task.setvariable variable=YourVSTSVariableName]$yourPowershellVariable"
答案 1 :(得分:0)
我道歉。我不是100%确定我理解你要做的事情。
场景-1:您希望在VSTS之外设置一些由VSTS内部版本定义使用的变量
(a)我将这些设置为主机上的环境变量。您可以从在该主机上运行的脚本中调用它们。 (b)在单独的Powershell脚本中设置这些变量,然后从Powershell-task-script点源该脚本。
场景-2:您希望将变量值从VSTS传递到Powershell脚本
您将转到构建和发布标签,选择版本,然后选择新定义操作。你正在创建一个空进程。您将为流程添加新工件。您最终可以添加Powershell任务(其中一个实用程序任务)。对于该任务,您可以选择要运行的脚本以及传递给它的参数。这些参数是脚本中的参数。这类似于CI/CD Hello world文章的创建发布定义中的步骤8/9。
希望这有帮助!
答案 2 :(得分:0)
在PowerShell中设置变量本身是微不足道的,只需将(=运算符)赋值给变量:
$VarName = 42
但问题很可能是寻找一种方法来设置环境变量,(VSTS)应用程序可以看到这些变量。并且'使用'从PowerShell调用时。
分配给任何会话环境变量前缀名称为" ENV"所以它看起来像这样:
$Env:VarName = 4201
这将保留当前PowerShell会话或控制台的生命周期 - 其他窗口中的其他会话或稍后运行将不会看到或受此类设置的影响。
如果您希望拥有持久性环境变量,则必须在注册表中为用户(HKey_Local_User)或计算机(Hkey_Local_Machine)设置该变量。
这些将从注册表获取环境设置(可能与您的过程中当前设置的不同):
[Environment]::GetEnvironmentVariable('path',[EnvironmentVariableTarget]::Machine)
[Environment]::GetEnvironmentVariable('path',[EnvironmentVariableTarget]::User)
Set命令类似但包含新值(例如,变量'工具'设置为' C:\':
[Environment]::SetEnvironmentVariable('Tools', 'C:\', [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable('Tools', 'C:\', [EnvironmentVariableTarget]::User)
还有一个"位置"枚举"流程" (而不是用户或机器)但使用上面显示的PowerShell $ Env:VariableName设置它更简单。
[Environment]::SetEnvironmentVariable('Tools', 'C:\', [EnvironmentVariableTarget]::Process)
答案 3 :(得分:0)
即使你可以设置变量值,但是你不能使用修改后的变量值来防止阶段运行,因为变量不能在代理阶段之间存在。
您还可以参考帖子Passing release variables between two agent phases。
对于在构建中设置变量的方法,您可以参考文档Define and modify your variables in a script。