ConvertTo-Json 如何保持散列 table 字段的顺序

ConvertTo-Json how to keep an order of the hash table fields

我是运行下面的PowerShell代码,我需要保持原始散列table键的顺序。

function New-GetServiceConnectionTask( $serviceConnectionId)
{
    @{
        environment      = @{ }
        taskId           = '0a9fdc5e-3f3a-4d3d-9f63-a4f007f9a1fe'
        version          = "1.*"
        name             = 'Get Service Endpoint Credentials'
        refName          = ''
        enabled          = $true
        alwaysRun        = $false
        continueOnError  = $false
        timeoutInMinutes = 0
        definitionType   = 'task'
        overrideInputs   = @{ }
        condition        = 'succeeded()'
        inputs           = @{
            connectedServiceNameARM = $serviceConnectionId
        }
    }
}
New-GetServiceConnectionTask xxx | ConvertTo-Json -Depth 99 

函数returns

{
    "version": "1.*",
    "refName": "",
    "definitionType": "task",
    "overrideInputs": {},
    "name": "Get Service Endpoint Credentials",
    "environment": {},
    "inputs": {
        "connectedServiceNameARM": "xxx"
    },
    "timeoutInMinutes": 0,
    "taskId": "0a9fdc5e-3f3a-4d3d-9f63-a4f007f9a1fe",
    "enabled": true,
    "condition": "succeeded()",
    "continueOnError": false,
    "alwaysRun": false
}

是否有任何选项可以保持原始哈希 table 键的顺序?

您可以通过在 @ 符号前面包含 [ordered] 来创建有序哈希,如下所示:

[ordered]@{
    environment      = @{ }
    taskId           = '0a9fdc5e-3f3a-4d3d-9f63-a4f007f9a1fe'
    version          = "1.*"
    name             = 'Get Service Endpoint Credentials'
    refName          = ''
    enabled          = $true
    alwaysRun        = $false
    continueOnError  = $false
    timeoutInMinutes = 0
    definitionType   = 'task'
    overrideInputs   = @{ }
    condition        = 'succeeded()'
    inputs           = @{
        connectedServiceNameARM = $serviceConnectionId
    }
}