पॉवरशेल 5.1 - मैं एक समापन बिंदु पर Invoke-RestMethod से POST डेटा का उपयोग कर रहा हूं।

एपीआई कॉल का मुख्य भाग JSON में इस तरह दिखता है:

{
  "ServiceKind": "Custom",
  "ApplicationName": "TestApp",
  "ServiceName": "TestService",
  "ServiceTypeName": "TestServiceType",
  "PartitionDescription": {
    "PartitionScheme": "Singleton"
  },
  "InstanceCount": "1"
}

मुझे पॉवर्सशेल में सिंटैक्स को सही करने में परेशानी हो रही है, और ऐसा लगता है कि यह पार्टिशन डिस्क्रिप्शन कुंजी से संबंधित है।

यहां मेरे पास है, जो चलाने पर एक त्रुटि फेंकना जारी रखता है:

    $ServiceKind = 'Custom'
    $ApplicationName = 'TestApp'
    $ServiceName = 'TestService'
    $ServiceTypeName = 'TestServiceType'
    $PartitionDescription = "{PartitionScheme = 'Singleton'}"
    $InstanceCount = '1'
    $url = 'https://www.contoso.com'
    $headers = 'our headers'
    $bodyTest = @{
       ServiceKind = $ServiceKind
       ApplicationName = $ApplicationName
       ServiceName = $ServiceName
       ServiceTypeName = $ServiceTypeName
       PartitionDescription = $PartitionDescription
                 }

Invoke-RestMethod -Uri $url -Headers $headers -body $body -Method Post -ContentType ‘application/json’

त्रुटि संदेश:

Invoke-RestMethod : {"Error":{"Code":"E_INVALIDARG","Message":"The request body can't be deserialized. Make sure it contains a valid PartitionedServiceDescWrapper object."}} 

मुझे यकीन है कि इसे $PartitionDescription मान के साथ करना है, लेकिन मैं सही ढंग से काम करने के लिए कोई सिंटैक्स प्राप्त करने में असमर्थ हूं। अगर मैं $body पैरामीटर के बिना बिना API कॉल पास करता हूं तो मुझे कोई त्रुटि नहीं मिलती है।

1
Stpete111 21 अगस्त 2019, 20:01

1 उत्तर

सबसे बढ़िया उत्तर

आप अपनी वस्तु को सही ढंग से घोंसला नहीं बना रहे हैं:

$body = @{
    ServiceKind          = 'Custom'
    ApplicationName      = 'TestApp'
    ServiceName          = 'TestService'
    ServiceTypeName      = 'TestServiceType'
    PartitionDescription = @{
        PartitionScheme = 'Singleton'
    }
    InstanceCount        = '1'
} | ConvertTo-Json

इसे और बेहतर बनाने के लिए:

$irmParams = @{
    Uri         = 'https://www.contoso.com'
    Method      = 'POST'
    ContentType = 'application/json'
    Headers     = @{ Key = 'Value' }

    Body        = @{
        ServiceKind          = 'Custom'
        ApplicationName      = 'TestApp'
        ServiceName          = 'TestService'
        ServiceTypeName      = 'TestServiceType'
        PartitionDescription = @{
            PartitionScheme = 'Singleton'
        }
        InstanceCount        = '1'
    } | ConvertTo-Json
}
Invoke-RestMethod @irmParams
2
Maximilian Burszley 21 अगस्त 2019, 21:32