2014-06-23 45 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"