将 JSON 字符串传递到 Azure CLI(来自 PowerShell)时需要用双引号括起来的属性名称

Kai*_*ter 4 powershell azure azure-monitoring azure-cli

要在 Azure 防火墙上创建诊断设置,我想传入日志和指标设置。

我在 2 个变量中定义这些,然后将它们传递到 Azure CLI:

$logsSetting = "[{'category': 'AzureFirewallApplicationRule','enabled': true,'retentionPolicy': {'days': 0,'enabled': false}},{'category': 'AzureFirewallNetworkRule','enabled': true,'retentionPolicy': {'days': 0,'enabled': false}}]"
$metricsSetting = "[{'category': 'AllMetrics','enabled': true,'retentionPolicy': {'days': 0,'enabled': false},'timeGrain': null}]"

az monitor diagnostic-settings create --name $FW_NAME `
   --resource $FW_NAME -g $VNET_GROUP --resource-type Microsoft.Network/azureFirewalls `
   --resource-group $VNET_GROUP `
   --workspace $FW_NAME `
   --logs $logsSetting `
   --metrics $metricsSetting
Run Code Online (Sandbox Code Playgroud)

执行这个我得到Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

我试过没有成功

  • 从多行字符串文字更改为单行(这导致了另一个错误)
  • 替换'"

Kai*_*ter 8

--debugAzure CLI添加参数显示,在似乎导致错误的参数转换过程中消除了单引号:

Alias Manager: Transformed args to ['monitor', ... '--logs', '[{category: AzureFirewallApplicationRule,enabled: true,retentionPolicy: {days: 0,enabled: false}},{category: AzureFirewallNetworkRule,enabled: true,retentionPolicy: {days: 0,enabled: false}}]', '--metrics', '[{category: AllMetrics,enabled: true,retentionPolicy: {days: 0,enabled: false},timeGrain: null}]', '--debug']
Run Code Online (Sandbox Code Playgroud)

解决方案:转义引号\"使其工作:

$logsSetting = "[{'category': 'AzureFirewallApplicationRule','enabled': true,'retentionPolicy': {'days': 0,'enabled': false}},{'category': 'AzureFirewallNetworkRule','enabled': true,'retentionPolicy': {'days': 0,'enabled': false}}]".Replace("'",'\"')
$metricsSetting = "[{'category': 'AllMetrics','enabled': true,'retentionPolicy': {'days': 0,'enabled': false},'timeGrain': null}]".Replace("'",'\"')
Run Code Online (Sandbox Code Playgroud)