Powershell 脚本缺少类型名称

Powershell script Missingtypename

我正在尝试使用此文档通过 powershell 进行一些 API 调用 https://octopus.com/blog/manually-push-build-information-to-octopus

        $Headers = @{"X-Octopus-ApiKey"=$MYKEY"}
        $jsonBody = @{
            PackageId = "Test"
            Version = "1.1.1"
            OctopusBuildInformation =
                @{
                    BuildEnvironment = "Jenkins"
                    BuildNumber = "1"
                    BuildURL = "myURL"
                    VcsCommitNumber = "250"
                    VcsType = "Git"

                    Commits = [{Id = "250" LinkUrl = "gitUrl" Comment = "someComment"}]
                    VcsRoot = "gitUrl"
                }
         } | ConvertTo-Json -Depth 5

        Invoke-RestMethod -Method Post -Uri "http://alfadeployment/api/build-information" -Headers $Headers -Body $jsonBody

但是,由于我添加了提交数组​​,因此出现以下错误:

  Missing type name after '['.
      + CategoryInfo          : ParserError: (:) [], ParseException
      + FullyQualifiedErrorId : MissingTypename

PowerShell 数组未包含在 [...] 中 - 后者用于 类型文字 ,即引用 .NET 类型 - 因此出现错误消息。

可以 - 但不必 - 在 @(...) 中包含 PowerShell 数组,array-subexpression operator; using ,, the array constructor operator 就足够了,尽管 @(...)有助于提高视觉清晰度,并创建 (@()) 或 单元素 数组 (@('foo') ), 这可能比 unary 使用 , (, 'foo')).

此外,您的数组 element 也必须是 hashtable@{ ... },而不是 { ... },后者是脚本块),并且鉴于 属性 定义在 同一行,它们必须是 ;-分开了。

总而言之:

Commits = @(
  @{ Id = "250"; LinkUrl = "gitUrl"; Comment = "someComment" }
)