az 使用变量更新服务终结点
az update service-endpoints using variable
我正在尝试使用更新命令向子网添加多个服务端点,并使用一个变量来表示 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 是幂等的。
参数 --service-endpoints
接受 space 分隔的服务列表。
错误是因为您没有提供 space 分隔的列表。相反,您提供了一个简单的字符串,其中包含 spaces。
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......
现在,命令字符串被评估为表达式。
这与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
我正在尝试使用更新命令向子网添加多个服务端点,并使用一个变量来表示 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 是幂等的。
参数 --service-endpoints
接受 space 分隔的服务列表。
错误是因为您没有提供 space 分隔的列表。相反,您提供了一个简单的字符串,其中包含 spaces。
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......
现在,命令字符串被评估为表达式。
这与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