我似乎无法在网上找到任何可以解释为什么Azure Profile.Model会被添加到我试图使用powershell azurerm资源命令检索的sql服务器数组的原因。在调试时单步调试以下代码表明,从我的函数返回的sql服务器数组只显示我指定的资源组中的4个元素,所有这些元素都是使用以下命令检索的sql服务器。
$sqlServers = Get-AzureRmResource -ResourceGroupName `
$resourceGroup.ResourceGroupName -ResourceType Microsoft.Sql/servers `
-IsCollection -ApiVersion 2015-05-01-preview
上面的代码位于一个函数中,用于检索给定资源组的服务器。在函数的底部,我只是return $allServers
。
Function GetSharedServers {
Param (
[string]$subscriptionId
)
if($subscriptionId -eq "") {
return @()
}
Set-AzureRmContext -SubscriptionId $subscriptionId
$resourceGroups = Get-AzureRmResourceGroup
$allServers = @()
foreach($resourceGroup in $resourceGroups) {
$sqlServers = Get-AzureRmResource -ResourceGroupName $resourceGroup.ResourceGroupName -ResourceType Microsoft.Sql/servers `
-IsCollection -ApiVersion 2015-05-01-preview
if ($sqlServers.count -gt 0) {
$allServers += $sqlServers
}
}
return $allServers
}
调用此函数的代码
$sqlServers = GetSharedServers $subscriptionId
在Debug上的GetSharedServers中,$ allServers数组只包含4个元素,所有元素都是SQL Server实例。一旦我进入调用该函数的代码,就会添加Profile.Model。所以上面,$ allServers是Sql服务器,$ sqlServers现在有一个Profile.Model拼接到0元素。下面的函数只是遍历从GetSharedServers返回的$ sqlServers数组,这是我必须从1开始的地方。
Function SelectSharedInstance {
Param (
[array]$sqlServers,
[string]$env
)
# Starting at 1 since for some reason azure account is passed as 0?
for($i = 1; $i -le $sqlServers.length -1; $i++) {
Write-Host $i ")" $sqlServers[$i].Name "`r"
}
$selectedServer = Read-Host -Prompt "Please select a $env shared sql server instance"
return $selectedServer
}
正如我上面所说,在vscode中逐步调试该函数显示返回的数组仅包含资源组上的4个服务器。但是在下一个调试步骤中,当我返回调用该函数的脚本时,奇怪的是数组现在有一个新的[0]元素,类型为Microsoft.Azure.Commands.Profile.Model
。
这意味着现在只列出返回的$allServers
我必须从[1]元素开始,因为数组已被配置文件元素破坏。这不是一个大问题,只是不是理想的结果。
我现在的问题是,是否有人知道为什么Microsoft.Azure.Commands.Profile.Model
会被使用azure powershell恶意拼接到我的阵列中?我已经尝试删除-AngenRmContext -DefaultProfile,然后返回数组,看看我是否可以取消设置我的上下文,并希望不将它添加到数组,这没有帮助。我在这里不知所措,为什么只会添加到我的数组中。
答案 0 :(得分:1)
您必须将Set-AzureRmContext
的结果传递给null或将其分配给变量。否则,返回值将被放入管道并由GetSharedServers
函数返回:
Set-AzureRmContext -SubscriptionId $subscriptionId | Out-Null
请注意,在PowerShell中,您不需要使用return
关键字从函数返回内容,它仅用于退出函数。