json - 仅当保存到变量时,powershell json转换问题才能纠正结果

标签 json powershell formatting

Json转换,结果之间为

> $container=az container list -o json|convertfrom-json
> $container|select name,provisioningstate

输出:
name           provisioningState
----           -----------------
master         Succeeded
pasbackground1 Succeeded
sftp           Succeeded

Json转换,结果之间不存在
> az container list -o json|convertfrom-json|select name,provisioningstate

输出:
 name provisioningstate
---- -----------------

我希望在这里得到与上述相同的结果。

为什么保存临时结果会带来与在行中指定管道命令不同的结果。

最佳答案

默认情况下,运行时引擎在将输出提供给dowstream cmdlet时会展开(或枚举)所有集合类型

但是,PowerShell v6.x及更高版本中的ConvertFrom-Json以防止运行时枚举它们的方式返回结果-因此,管道中的下一个cmdlet将作为单个管道项接收[object[]]数组。

您可以通过多种方式解决此问题:

  • 嵌套初始管道:

  • (az container list -o json |ConvertFrom-Json) |Select Name,ProvisioningState
    
  • ForEach-Object在返回时展开数组:

  • az container list -o json |ConvertFrom-Json |ForEach { $_ } |Select Name,ProvisioningState
    
  • 使用中间变量(如您所见):

  • $containers = az container list -o json |ConvertFrom-Json 
    $containers |Select Name,ProvisioningState
    
  • 升级到较新版本的PowerShell
  • 在PowerShell [Core] 7.0中更改了默认行为

  • if($PSVersionTable['PSVersion'].Major -ge 7){
      az container list -o json |ConvertFrom-Json |Select Name,ProvisioningState
    }
    

    关于json - 仅当保存到变量时,powershell json转换问题才能纠正结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61411805/

    相关文章:

    objective-c - 将秒整数转换为 HH :MM, iPhone

    c# - 如何格式化这个字符串以便它可以被 Convert.ToDateTime 识别?

    javascript - 使用 Angular Js 从 API 获取 Json 数据

    javascript - 将按钮值传递给模态中的 Url.Action

    java - Jackson 反序列化 json 对象数组,忽略某些对象

    android - 从 .json 文件创建下拉菜单

    powershell,如何监控目录并将文件移动到另一个文件夹

    像 Windows 一样显示字节数的 Delphi 函数

    powershell - 导出安全组中所有用户的电子邮件地址

    powershell - 根据长度递归重命名文件夹