Azure Powershell用于检查资源名称

Azure Powershell用于检查资源名称,powershell,azure,Powershell,Azure,Azure可以拒绝随机生成的资源名称。是否有Powershell cmdlet来检查这些名称 我知道有一个测试名字。但它只能在有限的资源类型下工作。对于我的用例来说还不够。存储、SQL、DNS、公共IP 我知道有一个REST-API。但是当我通过Invoke RestMethod调用它时,它返回一个错误:{错误:{代码:AuthenticationFailed,消息:Authentication failed。缺少'Authorization'头。} 我对Powershell不是很在行,有人能告

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

我知道有一个测试名字。但它只能在有限的资源类型下工作。对于我的用例来说还不够。存储、SQL、DNS、公共IP

我知道有一个REST-API。但是当我通过Invoke RestMethod调用它时,它返回一个错误:{错误:{代码:AuthenticationFailed,消息:Authentication failed。缺少'Authorization'头。}

我对Powershell不是很在行,有人能告诉我Azure Powershell cmdlet可以执行这样的任务吗,或者帮助我完成REST-API工作吗

谢谢

使用RESTAPI调用RestMethod对于您的情况来说已经足够好了。但是,你需要做一些准备

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

在中登录到您的Azure帐户。 从左窗格中选择Active Directory,可以单击默认目录。 单击应用程序,然后在底部窗格中单击添加。 您应该创建一个WEB应用程序和/或WEB API。对于名称、登录URL和应用程序ID URI,请输入任何合适的内容,因为在本例中这无关紧要。我在测试时输入登录URL和应用程序ID URI。 单击“确定”以创建。 创建后,单击应用程序的配置。向下滚动至“密钥”部分,选择密码的有效期。 保存并获取客户端的密钥。在此页面中,您可以获取客户端id和密钥。复制并保存到其他地方,因为以后您将需要它们。 在“配置”页面的“其他应用程序的权限”下,单击“添加应用程序”。 选择Windows Azure服务管理API,然后单击“确定”添加。 将Access Azure服务管理作为组织用户预览委派权限添加到服务管理API。 保存更改。 有关此操作的更多信息,请参阅

下面的脚本将为RESTAPI提供适当的头

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>'}"

问题的核心是如何为调用Rest构建身份验证http头以满足Azure需求。你可以这样做

在Azure默认Active Directory中创建应用程序 保存应用程序客户端id和密钥 向资源组授予应用程序适当的权限 在Powershell上下文中添加Microsoft.IdentityModel.Clients.ActiveDirectory.dll 为令牌调用Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext方法AcquireTokenAsync 使用步骤5中的令牌构造auth头 传递标头和rest uri以调用rest cmdlet
您可以参考更多详细信息以获取完整的示例代码。

如上所述,大多数提供程序都有一个API,您可以使用该API查看名称是否已获取或是否具有全局唯一性。我已经将其中一些封装在PowerShell函数中。看