Я пытаюсь запустить Add-AzStorageAccountNetworkRule
в конвейере ADO, и он постоянно выдает мне эту ошибку и ничего более, даже при -Debug
журналировании:
DEBUG: 9:10:14 PM - [ConfigManager] Got nothing from [DisplaySecretsWarning], Module = [], Cmdlet = []. Returning
default value [True].
DEBUG: 9:10:14 PM - AddAzureStorageAccountNetworkRuleCommand begin processing with ParameterSet 'IpRuleString'.
##[error]Windows PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.
##[error]PowerShell exited with code '1'.
Конкретная команда, которую я запускаю:
Add-AzStorageAccountNetworkRule -ResourceGroupName "myRg" -Name "myStorageAcct" -IPAddressOrRange @ ("0.0.0.0") -Debug
+ любое количество дополнительных настроек ниже. Это недействительные ресурсы или IP-адреса Azure, но их должно быть достаточно для воспроизведения проблемы. Я получаю одну и ту же проблему локально с каждой из следующих конфигураций:
-Confirm:$false
(это решает проблему локально, но не имеет значения в конвейере ADO)-Force
(не распознан)$ConfirmPreference = "None"
непосредственно перед фактической строкой Add-AzStorageAccountNetworkRule
в той же задаче конвейера.$PSDefaultParameterValues = @{ '*:Force' = $true; '*:Confirm' = $false }
непосредственно перед фактической строкой Add-AzStorageAccountNetworkRule
в той же задаче конвейера.-IPRule (@{IPAddressOrRange = "$myIp";Action = "allow"})
вместо -IPAddressOrRange $myIP
Есть ли специальный флаг для этого модуля, которого мне не хватает? Обновился ли синтаксис после ответа на предыдущие вопросы SO?
При локальном запуске я использую Win+R и ввожу «powershell.exe -NonInteractive», затем устанавливаю нужные мне переменные и запускаю Import-Module Az.Storage
перед запуском Add-AzStorageAccountNetworkRule ...
Спасибо, я отредактировал его, включив в него команду, которую запускаю: «Add-AzStorageAccountNetworkRule -ResourceGroupName $(UAT_STORAGE_ACCT_RG) -Name $(UAT_STORAGE_ACCT) -IPAddressOrRange $myIP -Debug». Переменные разрешаются.
И вы уверены, что именно строка Add-AzStorageAccountNetworkRule
вызывает ошибку? Пробовали ли вы добавить строку журнала, например write-host "done calling Add-AzStorageAccountNetworkRule"
, сразу после нее, чтобы убедиться, что это не последующая строка, вызывающая ошибку? Я могу воспроизвести точное сообщение об ошибке, используя, например, powershell -noninteractive -c "read-host"
, но powershell -noninteractive -c "Add-AzStorageAccountNetworkRule -resourcegroupname $null -name 'bbb' -IPAddressOrRange @()"
выдает другую ошибку...
Да, это определенно именно эта строка, поскольку это единственная строка, которую я использую при локальном воспроизведении. Если у вас есть образец сценария, было бы здорово. Мне любопытно, какую еще ошибку вы получаете: пустой список может быть проблемой, имя $null RG или имя учетной записи bbb также могут вызывать эту другую ошибку.
Это также последняя строка моего скрипта, и непосредственно перед ней есть строка Write-Host, которая выполняется нормально :(
Я получаю следующую ошибку: Add-AzStorageAccountNetworkRule : Missing an argument for parameter 'ResourceGroupName'. Specify a parameter of type 'System.String' and try again.
— я намеренно оставил их как недопустимые значения, чтобы попытаться воспроизвести ошибку, но она не воспроизводит именно ту, которую вы видите, поэтому у меня нет идей.
Я бы попробовал использовать действительные строки, как я. Что-то простое, например Add-AzStorageAccountNetworkRule -ResourceGroupName "myRg" -Name "myStorageAcct" -IPAddressOrRange @ ("0.0.0.0") -Debug
, выдает ту же ошибку.
Использование задачи AzurePowerShell@5
Вы можете использовать задачу AzurePowerShell@5
для запуска Add-AzStorageAccountNetworkRule
и добавления сетевых правил в свою учетную запись хранения.
pool:
vmImage: windows-latest
steps:
- task: AzurePowerShell@5
inputs:
azureSubscription: '{ARM service connection}'
ScriptType: 'InlineScript'
Inline: 'Add-AzStorageAccountNetworkRule -ResourceGroupName $(rg) -Name $(sa) -IPAddressOrRange "10.0.0.0/7","28.2.0.0/16"'
azurePowerShellVersion: 'LatestVersion'
В моем конвейере он отлично работает:
Использование задачи PowerShell@2
Чтобы запустить Add-AzStorageAccountNetworkRule
в задаче PowerShell, вам необходимо установить модуль Az и пройти аутентификацию в Azure с помощью Connect-AzAccount
.
В приведенном ниже примере я использую принцип службы для аутентификации и добавляю IP-адрес текущего агента, размещенного на MS, в сетевое правило учетной записи хранения.
pool:
vmImage: windows-latest
steps:
- task: PowerShell@2
displayName: 'Install Az module'
inputs:
targetType: 'inline'
script: 'Install-Module -Name Az -AllowClobber -Scope CurrentUser -Force'
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Import-Module Az
$ip = Invoke-RestMethod http://ipinfo.io/json | Select -exp ip
Write-Host "The IP address of current agent machine is $ip"
$clientSecret = "$(Secret)"
$clientId = "$(ClientId)"
$tenantId = "$(TenantId)"
$resourceGroup = "$(rg)"
$storageAccount = "$(sa)"
$securePassword = ConvertTo-SecureString -String $clientSecret -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientId, $securePassword
Connect-AzAccount -ServicePrincipal -TenantId $tenantId -Credential $Credential
Add-AzStorageAccountNetworkRule -ResourceGroupName $resourceGroup -Name $storageAccount -IPAddressOrRange $ip
Потрясающий! Я думаю, что у меня возникла проблема со списком в моей настройке, эта проблема больше не возникает. Я все это время использовал PowerShell 5, не уверен, в чем заключалась разница, я обновлю, если выявлю проблему :) большое спасибо!
Похоже, вам не хватает одного или нескольких параметров при вызове
Add-AzStorageAccountNetworkRule
— PowerShell в интерактивном режиме обычно запрашивает их, но, поскольку он находится в неинтерактивном режиме, он не может этого сделать, и именно об этом вам говорит ошибка. Однако только по вашим журналам трудно сказать — можете ли вы добавить фактический код, который вы вызываете...