Как добавить значения аргументов с подчеркиванием в задачу конвейера Azure DevOps PowerShell

#powershell #azure-devops #yaml #azure-pipelines

#powershell #azure-devops #yaml #azure-конвейеры

Вопрос:

У меня есть конвейер Azure DevOps с несколькими аргументами для создания виртуальной машины

     
task: AzurePowerShell@5
  inputs:
    azureSubscription: 'Visual Studio Enterprise Subscription – MPN(07f41212-2053-434e-XXXX)'
    ScriptType: 'FilePath'
    ScriptPath: '$(System.DefaultWorkingDirectory)/CreateNewVMforImage.ps1'
    ScriptArguments: -azSubscriptionId "07f41212-2053-434e-XXXXX" -azResourceGroupName "AZREUSMGMTRG" -azSnapshotName "SNAPSHOT2GOOD" -azNewOSDiskName "ImageOSDisk5"  -azVMLocation "eastus" -azVMNetwork "MGMTVNET" -azVMName "AZREUSLSIMG6" 
    
    azurePowerShellVersion: LatestVersion
    pwsh: true
  

Если я добавлю следующие два значения аргументов, ошибка выполнения конвейера выйдет, и я понимаю, что это происходит из-за подчеркивания, потому что в других значениях нет подчеркивания, и это не вызывает проблем. Только когда значение имеет подчеркивание, подобное приведенному ниже, оно выдает ошибку во время выполнения конвейера.

     -azVMStorageType "Standard_LRS"
    -azVMSize "Standard_B2ms"
  

Это текст ошибки.

 A positional parameter cannot be found that accepts an argument
  

Мой вопрос в том, как я могу добавить значения аргументов с подчеркиванием в нем в файле pipeline YAML?

Параметры PS похожи на приведенные ниже

 [CmdletBinding()]
param (
    
#Subscription ID
    [Parameter(Mandatory=$true)]
    [string]
    $azSubscriptionId,
    
    #ResourceGroupName
    [Parameter(Mandatory=$true)]
    [string]
    $azResourceGroupName,

    #MotherSnapshotName
    [Parameter(Mandatory=$true)]
    [string]
    $azSnapshotName,

    #NewVMOSDiskName
    [Parameter(Mandatory=$true)]
    [string]
    $azNewOSDiskName,

    #VM Storage Type 
    [Parameter(Mandatory=$true)]
    [string]
    $azVMStorageType,

    #VM Location
    [Parameter(Mandatory=$true)]
    [string]
    $azVMLocation,

    #VM Network
    [Parameter(Mandatory=$true)]
    [string]
    $azVMNetwork,

    #VM Name
    [Parameter(Mandatory=$true)]
    [string]
    $azVMName,

    #VM Size
    [Parameter(Mandatory=$true)]
    [string]
    $azVMSize

)

  

Любая помощь будет оценена.

Комментарии:

1. Было бы полезно предоставить текст ошибки.

2. Привет @askwizard, я могу успешно использовать _ в аргументе. Не могли бы вы удалить подчеркивания и повторить попытку, а затем любезно поделиться результатом здесь? Кроме того, пожалуйста, также установите для переменной system.debug значение true, а затем предоставьте полный подробный журнал здесь. Спасибо.

3. Аргументы без этих двух значений могут создавать виртуальную машину, единственная проблема, когда я добавляю эти два значения аргумента в файл yaml.

4. Привет @askwizard, какой агент вы используете, размещенный агент или автономный агент? Не могли бы вы поделиться с нами полным файлом .ps1 и подробным журналом? Мне нужно проверить журнал и помочь вам. Спасибо.

Ответ №1:

Согласно документу: определяемые пользователем переменные могут состоять из букв, цифр, ., и _ символов. Я могу успешно использовать добавление значений аргументов с подчеркиванием в нем в файле pipeline YAML. Пример:

powershell.ps1

 [CmdletBinding()]
param (
    
    #Subscription ID
    [Parameter(Mandatory=$true)]
    [string]
    $test01,
    
    #ResourceGroupName
    [Parameter(Mandatory=$true)]
    [string]
    $test02,

    #MotherSnapshotName
    [Parameter(Mandatory=$true)]
    [string]
    $test03

)

 Write-Host "test01 is" $test01
 Write-Host "test02 is" $test02
 Write-Host "test03 is" $test03
  

Сборка YAML:

 steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'Microsoft Azure Internal Consumption (daaeef3e-d7fe-49e8-baaa-b3df9d072825)'
    ScriptType: 'FilePath'
    ScriptPath: 'powershell.ps1'
    ScriptArguments: '-test01 "test" -test02 "Just_a_test" -test03 "Just a test"'
    azurePowerShellVersion: 'LatestVersion'
  

И результат:

введите описание изображения здесь