【问题标题】:az update service-endpoints using variableaz 使用变量更新服务端点
【发布时间】:2021-06-29 08:23:57
【问题描述】:

我正在尝试使用更新命令将多个服务端点添加到子网,并使用一个变量来表示 SE

当它运行时,它会失败并出现错误,指出阵列使用了无效的服务名称。

在没有 SE 变量的情况下运行命令时,它运行没有任何问题。

$SE = "Microsoft.KeyVault Microsoft.Storage"

az network vnet subnet update --service-endpoints $SE --resource-group MyRg1 --vnet-name MyVnet --name MySnet

## Used to display the varaible format
Write-host "az network vnet subnet update --service-endpoints $SE --resource-group MyRg1 --vnet-name MyVnet --name MySnet"

使用循环并添加每个 SE 不是一个好的选择,因为更新 cmd 是幂等的。

【问题讨论】:

    标签: azure service command-line-interface endpoint


    【解决方案1】:

    这与powershell如何处理变量有关;您传入的 $SE 是单个位置参数,而 az 客户端将它们解析为不同的。 这是 powershell 的常见问题。例如,考虑一个打印命令行参数的应用程序:

    > $SE = "my args"
    > MyExe.exe $SE something else
    

    输出将是:

    arg0: MyExe.exe
    arg1: my args
    arg2: something
    arg3: else
    

    要纠正这个问题,您需要指示 powershell 将字符串拆分为一个数组,该数组(当它为az 构建命令行时)会拆分为多个参数:

    az network vnet subnet update --service-endpoints $($SE -split ' ') --resource-group MyRg1 --vnet-name MyVnet --name MySnet
    

    【讨论】:

    • 非常感谢@KommandanKeen,它工作得很好;)
    【解决方案2】:

    参数--service-endpoints接受以空格分隔的服务列表。

    错误是因为您没有提供以空格分隔的列表。相反,您提供的是一个带有空格的简单字符串。

    az network vnet subnet update --service-endpoints Microsoft.KeyVault Microsoft.Storage
    

    上述命令应该可以解决您的问题。

    更新:

    我尝试了@KommandanKeen 的方法。我无法让它工作。你可以试一试,看看它是否适合你。

    另外,我想出了一个解决方法:

    通过使用 Invoke Expression - Invoke-Expression 将字符串计算为命令。

    Invoke-Expression "az network vnet subnet update --service-endpoints $SE --resource-group MyRg1 --vnet-name MyVnet --name MySnet"
    

    在这种情况下,$SE 被扩展并且命令字符串被制定。

     az network vnet subnet update --service-endpoints Microsoft.KeyVault Microsoft.Storage......
    

    现在,命令字符串被评估为表达式。

    【讨论】:

    • 如果我想使用一个变量作为空格分隔的服务列表,这不是解析。
    • 命令本身不起作用,或者您正在寻找一种动态生成服务端点的方法?
    • 您指定的命令可以随时运行。问题在于使用具有服务端点值的变量时。前任。 az network vnet subnet update --service-endpoints $SE --resource-group MyRg1 --vnet-name MyVnet --name MySnet
    • 非常感谢您的努力,KommandanKeen 的方法在我的脚本中有效。非常感谢您的宝贵时间:)
    猜你喜欢
    • 2017-12-06
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多