Powershell 为什么Test AzureName总是返回false?

Powershell 为什么Test AzureName总是返回false?,powershell,Powershell,在Azure中运行此脚本: Write-Host "Running ps_example.ps1" $resourceGroupName = 'myGroupName' $storageName = "psexample" $storageType = "Standard_LRS" $location = "centralus" if (Test-AzureName -Storage $storageName) { Write-Host "Use existing storage a

在Azure中运行此脚本:

Write-Host "Running ps_example.ps1"

$resourceGroupName = 'myGroupName'
$storageName = "psexample"
$storageType = "Standard_LRS"
$location = "centralus"

if (Test-AzureName -Storage $storageName) {
    Write-Host "Use existing storage account - $storageName"
} Else {
    Write-Host "Make new storage account - $storageName"
    New-AzureRmStorageAccount -ResourceGroupName $resourceGroupName -Name $storageName -Type $storageType -Location $location
}
第一次运行显示:

Running ps_example.ps1
Make new storage account - psexample
Running ps_example.ps1
Make new storage account - psexample
The storage account named psexample is already taken.
第二次运行显示:

Running ps_example.ps1
Make new storage account - psexample
Running ps_example.ps1
Make new storage account - psexample
The storage account named psexample is already taken.
为什么??这似乎表明
if(Test AzureName-Storage$storageName)
总是返回false

如果我告诉Azure使用powershell 1,则版本为1.113.5。请求版本2.0会导致版本2.0.11。两者的行为是相同的

编辑:

运行此:

$result = Test-AzureName -Storage $storageName
Write-Host $result

无论psexample是否存在,始终打印False。

您正在Azure中组合RM和SM cmdlet。Test-AzureName是一个服务管理cmdlet,而New-AzureRmStorageAccount是一个资源管理器cmdlet

您可能想尝试使用

if ((Get-AzureRmStorageAccountNameAvailability -Name $storageName).NameAvailable) {
    Write-Host "Make new storage account - $storageName"
    New-AzureRmStorageAccount -ResourceGroupName $resourceGroupName -Name $storageName -Type $storageType -Location $location
} Else {
    Write-Host "Use existing storage account - $storageName"
}
要检查名称或创建存储帐户,您可以使用:

New-AzureStorageAccount

根据您想要使用的是SM还是RM。

有趣。我试过user891818的答案,但不起作用。“他的if语句是否有误?”当注意到评论时,顿布兰森回答得很好。所以应该是这样的:如果((Get-AzureRmStorageAccountNameAvailability-Name$storageName)-eq$True){New-AzureRmStorageAccount-ResourceGroupName$ResourceGroupName-Name$storageName-SkuName Standard_LRS}Get-AzureRmStorageAccountNameAvailability不返回布尔值,它返回一个Microsoft.Azure.Management.Storage.Models.CheckNameAvailabilityResult,其中包含一个布尔值。检查是否有效…我发现NameAvailable起了作用。我编辑了你的答案来说明这一点,但请随意调整它,因为你认为合适。