我有一个简单的 json 文件,如下所示:
[
{"ClientName": "Test Site 1", "ClientID": "000001"},
{"ClientName": "Test Site 2", "ClientID": "000002"},
{"ClientName": "Test Site 3", "ClientID": "000003"}
]
Run Code Online (Sandbox Code Playgroud)
当我使用以下 PowerShell 命令时:
ConvertFrom-Json (Get-Content TestSites.json -Raw)
我回来了System.Object[]。这不允许我将输出通过管道传输到另一个接受“ClientName”和“ClientID”参数的函数。
但是,当我将该对象分配给另一个变量时,如下所示:
$myobj = ConvertFrom-Json (Get-Content TestSites.json -Raw)
$myobj实际上是System.Management.Automation.PSCustomObject能够传递给我的函数的。
如何仅通过管道传输原始命令的结果,而不必先将其分配给另一个变量?
我希望这是有道理的。
你的 JSON 是一个数组,对吗?PowerShell 将在管道中展开数组,除非您明确更改该行为。假设您的 JSON 作为单个字符串存储在变量中,$json请考虑以下示例。
ConvertFrom-Json $json | ForEach-Object{$_.gettype().fullname}
System.Object[]
(convertFrom-Json $json) | ForEach-Object{$_.gettype().fullname}
System.Management.Automation.PSCustomObject
System.Management.Automation.PSCustomObject
System.Management.Automation.PSCustomObject
Run Code Online (Sandbox Code Playgroud)
您应该能够将表达式括在括号中以更改结果。在第二个示例中,它应该将 3 个对象分别发送到管道中。在第一个中,它作为单个对象数组发送。
我的解释需要改进,但我确信原因是 PowerShell 处理数组和管道的方式。展开是用来描述它的常用词。
因此,根据您的用例,您可能只需将表达式括在括号中,以便在ForEach我的示例中的管道之前对其进行处理。
| 归档时间: |
|
| 查看次数: |
5143 次 |
| 最近记录: |