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