#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. Спасибо вам всем, я последовал вашим предложениям, и теперь мой сценарий работает