Remove-AzureRmResource 请求的资源不支持 http 方法"DELETE"



好的 - 我有一个奇怪的.....

我使用以下代码通过 ARM 模板部署了编译作业:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"compile-settings": {
"type": "object",
"metadata": {
"description": "These are settings for a DSC Compile"
}
},
"tag-values": {
"type": "object",
"metadata": {
"description": "These are the Tag values"
}
}
},
"resources": [
{
"name": "[parameters('compile-settings').name]",
"type": "Microsoft.Automation/automationAccounts/compilationjobs",
"apiVersion": "2015-10-31",
"location": "Australia Southeast",
"tags": "[parameters('tag-values')]",
"dependsOn": [],
"properties": {
"configuration": "[parameters('compile-settings').configuration]",
"parameters": "[parameters('compile-settings').parameters]"
},
"resources": []
}
],
"outputs": {}

}

因为我目前正在开发。 当我重新运行部署时,出现以下错误:

{ "代码": "冲突", "消息":"具有指定 ID 的作业已存在。作业ID: cde3eb0e-e8e4-de3e-0eae-e4cde3eb0eae" }

使用resources.azure.com,我找不到此资源,但是在使用PowerShell时可以找到它,例如

Get-AzureRmResource -ResourceId "/subscriptions/{subscriptionId}/resourceGroups/rg-au-901/providers/Microsoft.Automation/automationAccounts/aa-au-901/compilationjobs/cde3eb0e-e8e4-de3e-0eae-e4cde3eb0eae" -ApiVersion "2015-10-31"

结果:

ResourceId :/subscriptions/{subscriptionId}/resourceGroups/rg-au-901/providers/Microsoft.Automation/automationAccounts/aa-au-901/compilationjobs/cde3eb0e-e8e4-de3e-0eae-e4cde3eb0eae 资源名称 : aa-au-901/cde3eb0e-e8e4-de3e-0eae-e4cde3eb0eae资源类型 : Microsoft.自动化/自动化帐户/编译作业 资源组名称 : rg-au-901 订阅 ID : xxxx-xx-xxxx-xx-xx 属性 : @{jobId=cde3eb0e-e8e4-de3e-0eae-e4cde3eb0eae; 创建时间=2017-07-16T08:27:13.457+00:00; 预配状态 = 挂起; 状态 = 已暂停;状态详细信息 = 无;开始时间=2017-07-16T08:28:01.74+00:00;结束时间=; 上次修改时间=2017-07-16T08:28:13.85+00:00;最后状态修改时间=2017-07-16T08:28:13.85+00:00;异常=正在运行 命令已停止,因为首选项变量"错误操作首选项"或公共参数设置为"停止":术语 "xStorage\xWaitforDisk"不能被识别为 cmdlet、函数、脚本文件或可操作程序的名称。检查 名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。参数=;配置=; 运行=;newNodeConfigurationBuildVersionRequired=False}

但是,当我尝试使用带有Force参数的 Remove-AzureRmResource 删除它时,它失败了:

Remove-AzureRmResource :管道已停止。 行:1 字符:1 + Remove-AzureRmResource -ResourceId "/subscriptions/xxxxx-xx-xxxx ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Remove-AzureRmResource], PipelineStopException + FullQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.RemoveAzureResourceCmdlet Remove-AzureRmResource : {"code":"MethodNotAllowed","message":"{\"Message\":\"请求的资源不支持 http 方法 'DELETE'.\"}"} 行:1 字符:1 + Remove-AzureRmResource -ResourceId "/subscriptions/xxxxx-xx-xxxx ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Remove-AzureRmResource], ErrorResponseMessageException+ FullQualifiedErrorId : MethodNotAllowed,Microsoft.Azure.Command.ResourceManager.Cmdlets.Implementation.RemoveAzureResourceCmdlet

帮助?

可以使用 powershell 步骤来生成 GUID,或者省略 GUID,以便它为自己生成一个。

此外,还有一个 Powershell cmdlet 用于启动编译作业,它不需要 GUID。

Start-AzureRmAutomationDscCompilationJob

根据我的知识,您无法删除编译作业。再次执行作业时,它将重新生成不同的作业 ID。您可以使用以下命令重新运行编译作业

Start-AzureRmAutomationDscCompilationJob -ResourceGroupName "shui" -AutomationAccountName "shuitest" -ConfigurationName "dscDomainJoin"

更多信息请参阅此链接。

如果要删除所有作业,则需要删除 DSC 配置。

我实际上发布了答案在错误中。如果相同的 GUID 已经存在,则我遇到了逻辑问题。

我发现我没有将父部署名称(总是不同的)传递给子部署,并且 ARM 模板中的唯一字符串函数未生成"唯一"GUID。

父模板中的资源现在具有以下代码:

"name": "[concat('dscCompile-', toLower(uniqueString(deployment().name)))]"

子模板使用变量,然后连接以创建唯一字符串以生成 GUID。

"deployment": "[concat('-', toLower(uniqueString(deployment().name)))]"
"name": "[concat('newGuid', copyIndex(), variables('deployment'))]",

感谢所有回复您的帮助和建议的人!

最新更新