2016-04-11 12 views
2

Azure'da WebApp yapılandırmasını yapılandırmak için "Set-AzureRmResource" kullanmaya çalışıyorum.Set-AzureRmResource - JSON Powershell Sözdizimini Kullanma?

$PropertiesObject = @{ 
"alwaysOn" = $true; 
} 
Set-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/config -ResourceName $SiteName/web -ApiVersion 2015-08-01 -Force 
### in this case "alwaysOn' sits within "properties": {. 

şimdi ancak bu bir iç içe olduğu başka bir özelliği ayarlamak istiyorum:

ben "AlwaysOn = true" ayarlamak için çalışır Burada bir kod parçası var. örneğin:

"azureBlobStorage": { 
"sasUrl": null, 
"retentionInDays": null, 
"enabled": false 
} 
### in this case I want to set SasUrl which sits within "properties"{ AzureBlobStorage { 

Bunun gibi iç içe geçmiş özellikleri ayarlamak için sözdizimini kaybettim.

Eğer terminolojim doğru değilse üzgünüm, powershell ve Json benim için oldukça yeni, ben giderken öğreniyorum.

Azure dokümantasyon diyor:

# SET web 
$PropertiesObject = @{ 
#Property = value; 
} 
#
"properties": { 
"httpLogs": { 
    "fileSystem": { 
    "retentionInMb": 35, 
    "retentionInDays": null, 
    "enabled": false 
    }, 
    "azureBlobStorage": { 
    "sasUrl": null, 
    "retentionInDays": null, 
    "enabled": false 
    } 
}, 
+0

da azureBlobStorage' 'unutmayınız İşte ApplicationLogs için FileSystem günlüğünü kapatarak bir örnek "$ SiteName/logs" altında ve "$ SiteName/web" değil. –

cevap

2

kullanmak istiyorsanız bu gördü ve bunu bilemiyorum dışarı; Bunu iç nesneler oluşturmaktan ziyade Hashtables ile daha basit bir yöntemle çalışıyorum.

$propertiesObject = [ordered] @{ 
             'applicationLogs' = @{ 
                 'fileSystem' = @{ 
                     'level' = 'Off' 
                  }   
             } 
         } 
Set-AzureRmResource -PropertyObject $propertiesObject -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName "$($webAppName)/logs" -ApiVersion 2015-08-01 -Force 

Sen HttpLogs sasUrl özelliğini ayarlayarak orijinal OP isteği için aynı şeyi yapabilir:

$propertiesObject = [ordered] @{ 
             'httpLogs' = @{ 
                 'azureBlobStorage' = @{ 
                     "sasUrl": "SASURL" 
                  }   
             } 
         } 
Set-AzureRmResource -PropertyObject $propertiesObject -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName "$($webAppName)/logs" -ApiVersion 2015-08-01 -Force 
+0

- güncellemenizi gönderdiğiniz için teşekkürler, bu çok daha kolay ve daha basit bir yöntem. Artık JSON'un biçimlendirilmesinde olduğunu görebiliyorum. – James

0

ben de bir süredir bu mücadele!

İçerdiği here numaralı bir yanıt var. Temel olarak iç nesneyi oluşturmanız ve ardından bu nesneyi dış özelliğe eklemeniz gerekir.

Yani

{ 
"Property": [ 
     { 
      "prop2": 1, 
      "prop1": "string" 
     } 
    ] 
} 

gibi bir şey Sen

$InnerPropertiesObject = @{ 
     prop1 = "string" 
     prop2 = 1 
     } 
$PropertiesObject = @{ 
    "Property" = [Object[]]$InnerPropertiesObject 
} 

kullanmak ve ardından Sadece başka durumda herkes

New-AzureRmResource -Name $ResourceName ` 
       -Location $ResourceLocation ` 
       -PropertyObject $PropertiesObject ` 
       -ResourceGroupName examplecomRG ` 
       -ResourceType $resourceType ` 
       -ApiVersion 2015-08-01 -Force 
+0

Merhaba Michael, yanıt için teşekkürler. Henüz bir şey yapmadığım için kafamın biraz aşağısında. JSON şablonu üzerinden okuma Doğru değeri ayarlamak için başka bir düzeye gitmem gerektiğine inanıyorum, bu yüzden örneğinizi takip edebilir ve daha ileride yerleştirebilirim. örneğin: "properties": {"httpLogs": {"azureBlobStorage" – James

+0

@James, hashtables'i anlamamı sağlayan bunu nasıl yapacağımı anladım! (çılgın şeyler onlar!) - en azından biraz daha iyi - ama evet, onları daha fazla iç içe geçirebilmeniz gerekir –