Ошибка Add-AzStorageAccountNetworkRule «Windows PowerShell находится в неинтерактивном режиме»

Я пытаюсь запустить 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 — PowerShell в интерактивном режиме обычно запрашивает их, но, поскольку он находится в неинтерактивном режиме, он не может этого сделать, и именно об этом вам говорит ошибка. Однако только по вашим журналам трудно сказать — можете ли вы добавить фактический код, который вы вызываете...

mclayton 18.06.2024 23:27

Спасибо, я отредактировал его, включив в него команду, которую запускаю: «Add-AzStorageAccountNetworkRule -ResourceGroupName $(UAT_STORAGE_ACCT_RG) -Name $(UAT_STORAGE_ACCT) -IPAddressOrRange $myIP -Debug». Переменные разрешаются.

Mark Wiemer 18.06.2024 23:30

И вы уверены, что именно строка Add-AzStorageAccountNetworkRule вызывает ошибку? Пробовали ли вы добавить строку журнала, например write-host "done calling Add-AzStorageAccountNetworkRule", сразу после нее, чтобы убедиться, что это не последующая строка, вызывающая ошибку? Я могу воспроизвести точное сообщение об ошибке, используя, например, powershell -noninteractive -c "read-host", но powershell -noninteractive -c "Add-AzStorageAccountNetworkRule -resourcegroupname $null -name 'bbb' -IPAddressOrRange @()" выдает другую ошибку...

mclayton 18.06.2024 23:55

Да, это определенно именно эта строка, поскольку это единственная строка, которую я использую при локальном воспроизведении. Если у вас есть образец сценария, было бы здорово. Мне любопытно, какую еще ошибку вы получаете: пустой список может быть проблемой, имя $null RG или имя учетной записи bbb также могут вызывать эту другую ошибку.

Mark Wiemer 19.06.2024 00:18

Это также последняя строка моего скрипта, и непосредственно перед ней есть строка Write-Host, которая выполняется нормально :(

Mark Wiemer 19.06.2024 00:23

Я получаю следующую ошибку: Add-AzStorageAccountNetworkRule : Missing an argument for parameter 'ResourceGroupName'. Specify a parameter of type 'System.String' and try again. — я намеренно оставил их как недопустимые значения, чтобы попытаться воспроизвести ошибку, но она не воспроизводит именно ту, которую вы видите, поэтому у меня нет идей.

mclayton 19.06.2024 00:24

Я бы попробовал использовать действительные строки, как я. Что-то простое, например Add-AzStorageAccountNetworkRule -ResourceGroupName "myRg" -Name "myStorageAcct" -IPAddressOrRange @ ("0.0.0.0") -Debug, выдает ту же ошибку.

Mark Wiemer 19.06.2024 00:29
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
7
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование задачи 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, не уверен, в чем заключалась разница, я обновлю, если выявлю проблему :) большое спасибо!

Mark Wiemer 19.06.2024 19:53

Другие вопросы по теме