Set-AzureRmResource 抛出 api-版本错误

Set-AzureRmResource throwing api-version error

我正在尝试以编程方式向 Azure 政府中的资源添加标签。当我尝试在没有标签的资源上设置标签时,我使用的是 Set-AzureRmResource 命令。我已经尝试设置 ApiVersion 和不设置(不应该使用最新的)当我使用调试标志时它显示正在设置的版本但我仍然在下面收到错误。

Set-AzureRmResource : Cannot validate argument on parameter 'ResourceId'. The argument is null or empty. Provide an
argument that is not null or empty, and then try the command again.
At line:1 char:108
+ ... ONMENT=""; ORGANIZATION="" } -ResourceId $resource.ResourceId  -Force ...
+                                              ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Set-AzureRmResource], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implem
   entation.SetAzureResourceCmdlet

我正在尝试 运行 的代码段如下。

Set-AzureRmResource -Tag @{ ENVIRONMENT=""; ORGANIZATION="" } -ResourceId $resource.ResourceId  -Force

编辑:指定 Azure 政府 编辑 2:从代码

中删除了明确的版本设置

我尝试在 Azure 政府中使用新的 Az 命令:

Set-AzResource -Tag @{ ENVIRONMENT=""; ORGANIZATION="" } -ResourceId $resource.ResourceId  -Force

..对我来说效果很好。 (我在使用较旧的 AzureRm 命令时遇到了序列化错误)。仅供参考...不确定您昨天尝试的时间,但存在导致某些服务中断的 DNS 问题,这可能导致了错误的错误。

我使用 AzureRM 模块版本 6.13.1 针对 Azure 政府资源测试了您上面的代码片段并且它可以正常工作。

您可以通过 运行 此代码段

获取您的版本
Get-Module AzureRM -List

对于以后看到此内容的任何人。该问题是 Azure 在 ResourceId 中编码“#”符号的方式中的一个已知错误。所以不要在资源字符串中使用“#”。

我们所做的代码更改是使用以下内容:

 $resource.ResourceId = $resource.ResourceId.Replace("#", "%23")

如果您有 # 符号,则进行简单修复,或者更改您的管理方式以不使用“#”命名事物。

感谢所有其他回复。我们必须开票才能获得这些信息。