如何在powershell中设置变量

问题描述 投票:-4回答:4

我试图在PowerShell中设置变量,以便我可以在发布定义中的自定义条件中使用它们,因此我可以防止相位运行是将VSTS变量设置为false或0

powershell azure-devops azure-pipelines-release-pipeline
4个回答
5
投票

您需要使用具有特殊字符串格式的Write-Host:

Write-Host "##vso[task.setvariable variable=YourVSTSVariableName]$yourPowershellVariable"


0
投票

我道歉。我不是百分百肯定我明白你要做什么。

场景-1:您希望在VSTS之外设置一些由VSTS内部版本定义使用的变量

(a)我将这些设置为主机上的环境变量。您可以从在该主机上运行的脚本中调用它们。 (b)在单独的Powershell脚本中设置这些变量,然后从Powershell-task-script点源该脚本。

场景-2:您希望将变量值从VSTS传递到Powershell脚本

您将转到“构建和发布”选项卡,选择“版本”,然后选择“新建定义”操作。你正在创建一个空进程。您将为流程添加新工件。您最终可以添加Powershell任务(其中一个实用程序任务)。对于该任务,您可以选择要运行的脚本以及传递给它的参数。这些参数是脚本中的参数。这类似于创建CI/CD Hello world文章的发布定义中的步骤8/9。

希望这可以帮助!


0
投票

在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)

0
投票

即使您可以设置变量值,但您不能使用修改后的变量值来防止阶段运行,因为变量不能在代理阶段之间保持不变。

你也可以参考邮政Passing release variables between two agent phases

对于在构建中设置变量的方法,您可以参考文档Define and modify your variables in a script

© www.soinside.com 2019 - 2024. All rights reserved.