Azure Powershell用于检查资源名称

Arc*_*her 0 powershell azure

Azure可以拒绝随机生成的资源名称.是否有任何Powershell cmdlet来检查这些名称?

我知道有一个Test-AzureName.但它只适用于有限类型的资源.对我的用例来说还不够.(存储,SQL,DNS,公共IP)

我知道有这个REST-API.但是当我通过Invoke-RestMethod调用它时,它会返回一个错误:{"error":{"code":"AuthenticationFailed","message":"身份验证失败.'Authorization'标头丢失了."}}

我不是很擅长Powershell,是否可以有人指出我使用Azure Powershell cmdlet执行此类任务或帮助我使REST-API工作?

谢谢!

Jac*_*eng 6

Invoke-RestMethod与" 检查资源名称 " REST API是你的情况不够好.但是,你需要做一些准备.

首先,您需要创建一个Active Directory应用程序.

  1. Classic Portal中登录您的Azure Accout .
  2. 从左窗格中选择Active Directory,可以单击您的默认目录.
  3. 单击Application,然后单击底部窗格中的Add.
  4. 您应该创建一个WEB APPLICATION AND/OR WEB API.对于NAME,SIGN-ON URLAPP ID URI,输入任何合适的内容,因为在这种情况下无关紧要.我在测试时为SIGN-ON URLAPP ID URI输入" https:// localhost " .
  5. 单击" 确定"以创建.
  6. 创建完成后,单击应用程序的配置.向下滚动到"密钥"部分,然后选择您希望密码有效的时间长度.
  7. 保存并获取客户的密钥.在此页面中,您可以获取客户端ID和密钥.将它们复制并保存在其他地方,因为稍后您将需要它们.
  8. 在" 配置页面"中,在其他应用程序权限下,单击" 添加应用程序".
  9. 选择" Windows Azure Service Management API",然后单击" 确定"以添加.
  10. Access Azure服务管理添加为组织用户(预览)委派的服务管理API权限.
  11. 保存更改.

有关此内容的详细信息,请参阅使用门户创建Active Directory应用程序和服务主体

以下脚本将为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>'}"
Run Code Online (Sandbox Code Playgroud)