2016-02-10 63 views
0

Azure可以拒絕隨機生成的資源名稱。是否有任何Powershell cmdlet檢查這些名稱?Azure Powershell檢查資源名稱

我知道有一個測試AzureName。但它只適用於有限類型的資源。我的用例不夠用。 (存儲,SQL,DNS,公共IP)

而且我知道有這個REST-API。但是當我通過Invoke-RestMethod調用它時,它會返回一個錯誤:{「error」:{「code」:「AuthenticationFailed」,「message」:「身份驗證失敗,'授權'標頭丟失。}}

我不是很擅長Powershell,有人能指出我的Azure Powershell cmdlet來完成這樣的任務,還是幫助我獲得REST-API的工作?

謝謝!

回答

3

Invoke-RestMethod與「Check resource name」REST API是足夠你的情況。但是,你需要做一些準備。

首先,您需要創建一個Active Directory應用程序。

  1. 登錄到您的Azure Accout Classic Portal
  2. 從左側窗格中選擇Active Directory,可以點擊默認目錄。
  3. 點擊應用,並點擊在底部窗格中添加
  4. 您應該創建一個WEB應用程序和/或WEB API。對於名稱,登錄URLAPP ID URI,請輸入任何適合的內容,因爲在這種情況下它無關緊要。我輸入「https://localhost」爲登錄URLAPP ID URI測試時。
  5. 點擊確定創建。
  6. 創建後,請點擊配置您的應用程序。向下滾動到「密鑰」部分,然後選擇您希望密碼有效的時間。
  7. 保存並獲得您的客戶的鑰匙。在此頁面中,您可以獲取您的客戶端ID和密鑰。將它們複製並保存到其他地方,因爲稍後您將需要它們。
  8. 配置頁,下權限到其他應用程序,單擊添加應用
  9. 選擇Windows Azure服務管理API,然後點擊確定添加。
  10. 添加以組織用戶的身份訪問Azure服務管理(預覽)委派對服務管理API的權限。
  11. 保存更改。

有關它的更多信息,請參閱Create Active Directory application and service principal using portal

下面的腳本會給你的REST API正確的頭。

try{ 
    $subscription = Get-AzureRmSubscription 
} 
catch{ 
    Login-AzureRmAccount 
    $subscription = Get-AzureRmSubscription 
} 

$tenantId = $subscription.TenantId 

#these are the client id and key you get from the above steps. 
$clientId = "<your client id>" 
$key = "<your key>" 

$authUrl = "https://login.windows.net/${tenantId}" 
$AuthContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]$authUrl 

$cred = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential $clientId,$key 
$result = $AuthContext.AcquireToken("https://management.core.windows.net/",$cred) 
$authHeader = @{ 
'Content-Type'='application/json' 
'Authorization'=$result.CreateAuthorizationHeader() 
} 

$URI = "https://management.azure.com/providers/microsoft.resources/checkresourcename?api-version=2014-01-01" 
Invoke-RestMethod -Uri $URI -Method POST -Headers $authHeader -Body "{'Name':'<the name you want to test>','Type':'<the resource type you want to test>'}" 
+0

它的作品,非常感謝你! – Archer

0

問題的核心是如何構造認證http頭調用靜止履行天青要求。您可以按如下

  1. 創建Azure中默認的Active Directory
  2. 保存應用程序客戶端ID和密鑰
  3. 格蘭特應用適當的權限,資源組
  4. 添加應用「Microsoft.IdentityModel做.Clients.ActiveDirectory.dll「
  5. 調用Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext方法AcquireTokenAsync令牌
  6. Contruct AUTH頭由令牌從步驟5
  7. 通報頭和休息的URI 調用靜止小命令

的更多細節可以爲完整的示例代碼中引用How to authenticate Azure Rest API with Azure Service Principal by Powershell