2014-06-23 44 views
4

我正在构建一个Power Shell脚本,以便在Azure中自动设置网站环境。该网站使用帐户存储。如果存在,我希望脚本不要创建帐户存储。如何使用Get-AzureStorageAccount检查Azure中的存储帐户

我想到用Get-AzureStorageAccount这种方式可以工作,但它不会:

Write-Verbose "[Start] creating $Name storage account $Location location" 

$storageAcct = Get-AzureStorageAccount –StorageAccountName $Name 
if (!$storageAcct) 
{ 
    $storageAcct = New-AzureStorageAccount -StorageAccountName $Name -Location $Location -Verbose 
    if ($storageAcct) 
    { 
     Write-Verbose "[Finish] creating $Name storage account in $Location location" 
    } 
    else 
    { 
     throw "Failed to create a Windows Azure storage account. Failure in New-AzureStorage.ps1" 
    } 
} 
else 
{ 
    Write-Verbose "$Name storage account in $Location location already exists, skipping creation" 
} 

问题是我不知道如何处理的Get-AzureStorageAccount回报。

非常感谢您提前!

+0

你能否详细说明的情况下?你是什​​么意思“......不知道如何处理Get-AzureStorageAccount''的返回?发生了什么,你想要发生什么? – Raf

+0

如果'Get-AzureStorageAccount'没有返回存储账户用我提供的名字创建存储帐户,否则跳过这一步。 – Julen

回答

15

我会建议使用Test-AzureName cmdlet来确定它的存在。所以,这样的事情。

if (!(Test-AzureName -Storage $Name)) 
{ 
    Write-Host "Creating Storage Account $Name" 
    New-AzureStorageAccount -StorageAccountName $Name -Location $Location 
} 

您也可以将Test-AzureName用于其他服务,例如Cloud Services,WebSites和ServiceBus。如果存在则返回True,否则返回False。

3

试试这个:

$Name = "myStorageAccount" 
$Location = "myLocation" 

Write-Host "[Start] creating $Name storage account $Location location" 
try{ 
    Get-AzureStorageAccount –StorageAccountName $Name -ErrorAction Stop | Out-Null 
    Write-Host "$Name storage account in $Location location already exists, skipping creation" 
    } 
catch{ 
    Write-Host "[Finish] creating $Name storage account in $Location location" 
    New-AzureStorageAccount -StorageAccountName $Name -Location $Location -Verbose  
} 
1

Test-AzureName不能与我们的构建代理一起工作,并且我们已经在代码中有了try/catch,所以第二个需要将它构建为函数。我选择的是标准的GET,并检查是否为空,则使用-ErrorAction忽略阻止它抛出一个异常,如果你正在使用Add-AzureAccount登录

# Check for storage account and create if not found  
$StorageAccount = Get-AzureRmStorageAccount -Name $StorageAccountName -ResourceGroupName $StorageAccountRG -ErrorAction Ignore 
if ($StorageAccount -eq $null) 
{  
    New-AzureRmStorageAccount -Location "West Europe" -Name $StorageAccountName -ResourceGroupName $StorageAccountRG -SkuName Standard_LRS -Kind Storage  
    $StorageAccount = Get-AzureRmStorageAccount -Name $StorageAccountName -ResourceGroupName $StorageAccountRG 
} 
1

@Rick雷尼的解决方案工作。但是,Azure和powershell有一组冲突和混淆的登录帐户(Windows Live与AD)和登录机制(经典:Add-AzureAccount;资源管理器:Login-AzureRmAccount)。某些Azure PowerShell cmdlet需要特定的登录名;此外,有些需要特定的账户类型!

要清除这些复杂,无证和令人困惑的权限问题,我们始终使用AD帐户,并通过Login-AzureRmAccount登录。我们还使用Azure资源管理器(ARM)资源和cmdlet,这是继微软向ARM推出其推荐和战略方法之后。但是,@ RIck的解决方案是ARM登录不适用的解决方案。 :-(所以你需要另一种方法,这是@达伦(存储)。然而,对于一个普通的替代Test-AzureName我建议Find-AzureRmResource。在存储

$StorageObject = Find-AzureRmResource -ResourceType "Microsoft.Storage/storageAccounts" | Where-Object {$_.Name -eq $storageName}   
if (!$StorageObject) { 
    $storageLocation = (Get-AzureRmResourceGroup -ResourceGroupName $resourceGroup).Location 
    $storageType = "Standard_LRS" 
    New-AzureRmStorageAccount -ResourceGroupName $resourceGroup -Name $storageName -Location $storageLocation -Type $storageType 
} 
3
Get-AzureRmStorageAccountNameAvailability -Name "accountname"