Преобразовать систему.Объект[]’ в тип’System.Строка

#string #azure #powershell

#строка #azure #powershell

Вопрос:

Я пытаюсь создать скрипт, который показывает IP, установленный в брандмауэре сервера SQL Azure, для этого я использую следующий код:

 $sqlservers = Get-AzSqlServer 

foreach ($server in $sqlservers)
{

 $sqlserver = $sqlservers.ServerName
 $sqlRg = $sqlservers.ResourceGroupName
 $firewallIP = Get-AzSqlServerFirewallRule -ServerName $sqlserver -ResourceGroupName $sqlRg
  
}
  

Но я получаю эту ошибку

 Get-AzSqlServerFirewallRule : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'ServerName'. Specified method is not supported.
At line:11 char:56
  ... rewallIP = Get-AzSqlServerFirewallRule -ServerName $sqlserver -Resour ...
                                                         ~~~~~~~~~~
      CategoryInfo          : InvalidArgument: (:) [Get-AzSqlServerFirewallRule], ParameterBindingException
      FullyQualifiedErrorId : CannotConvertArgument,Microsoft.Azure.Commands.Sql.FirewallRule.Cmdlet.GetAzureSqlServerFirewallRule



Get-AzSqlServerFirewallRule : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'ServerName'. Specified method is not supported.
At line:11 char:56
  ... rewallIP = Get-AzSqlServerFirewallRule -ServerName $sqlserver -Resour ...
                                                         ~~~~~~~~~~
      CategoryInfo          : InvalidArgument: (:) [Get-AzSqlServerFirewallRule], ParameterBindingException
      FullyQualifiedErrorId : CannotConvertArgument,Microsoft.Azure.Commands.Sql.FirewallRule.Cmdlet.GetAzureSqlServerFirewallRule
  

Главная кто-нибудь может мне помочь

заранее спасибо

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

1. В настоящее время вы передаете все серверы и все группы ресурсов одновременно. $sqlserver = $sqlservers.ServerName -> $sqlserver = $server.ServerName , и то же самое для $sqlRg

2. я попробовал способ, который вы только что написали, но все равно получаю ту же ошибку: $sqlservers = Get-AzSqlServer foreach ($server в $ sqlservers) { $ sqlserver = $ sqlserver. Имя_сервера $sqlRg = $sqlserver.ResourceGroupName $firewallIP = Получить-AzSqlServerFirewallRule -Имя_сервера $sqlserver -Имя_ресуРсогрУппы $sqlRg }

3. Вы объявляете $server переменную цикла в foreach() инструкции, поэтому используйте $server внутри цикла , а не что-либо еще

4. это >>> $sqlserver = $sqlservers.ServerName <<< поместит ВСЕ имена серверов в $Var слева. та же проблема возникает в следующей строке. НЕ ДЕЛАЙТЕ ЭТОГО. [ усмешка ] вместо этого используйте >>> $sqlserver = $server.ServerName <<< чтобы получить текущее имя сервера из текущего объекта server .

Ответ №1:

Вы использовали массив ($ sqlservers) серверов для назначения $sqlserver и $ sqlRg, вам нужно изменить его на $server

 $sqlservers = Get-AzSqlServer 

foreach ($server in $sqlservers)
{

 $sqlserver = $server.ServerName
 $sqlRg = $server.ResourceGroupName
 $firewallIP = Get-AzSqlServerFirewallRule -ServerName $sqlserver -ResourceGroupName $sqlRg
  
}
  

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

1. Спасибо вам всем, я последовал вашим предложениям, и теперь мой сценарий работает