如何迭代输入参数的对象属性

How to iterate over Object properties of an input parameter

我有一个 Azure 自动化 Powershell 工作流:

workflow wf
{
  param(
    [parameter(Mandatory=$True)]
    [object] $p
  )
  inlinescript
  {
    # ...
  }
}

我正在使用测试窗格对其进行测试并将值作为 {"FirstName": "John", "LastName": "Smith"} 传递。我也试过 {"FirstName"="John";"LastName"="Smith"} 并在这两种情况前添加 @

根据this

If your runbook has an object type input parameter, then use a PowerShell hashtable with (name,value) pairs to pass in a value. For example, if you have the following parameter in a runbook: [Parameter (Mandatory = $true)][object] $FullName then you pass the following value to the parameter: @{"FirstName"="Joe";"MiddleName"="Bob";"LastName"="Smith"}

但在我的所有测试中 $p 为空。

如何定义实际对象,将其传入,然后遍历 属性 名称和值?

要访问 PowerShell 工作流 activity 中的输入参数,您必须通过 $Using 关键字来完成。一旦我弄清楚了,我就能够看到该类型作为字符串传入。因此,我必须使用 ConvertFrom-Json cmdlet 从 json 字符串转换为对象。然后我可以通过获取 PSObject:

Properties 属性 来遍历属性
$pObj = $Using:p | ConvertFrom-Json
ForEach ($pr in $pObj.PSObject.Properties)
{
   #$pr.Name
   #$pr.Value
}