#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'
И результат: