Powershell上的kubectl提供了从JSON创建的自定义对象的字符串表示



我遇到了这个奇怪的问题,想知道如何解决它。

在我的Windows机器上运行Powershell 5.1.190411.682(major.minor.build.revision(,下面的命令为我提供了一个合适的JSON。

PS C:workspacerapidresponsejenkinslib-dsresourcesscripts> kubectl get accountquota account-name-quota -o jsonpath="{.status.total}"
{"hard":{"limits.cpu":"256","limits.memory":"256G","pods":"200","requests.cpu":"64","requests.memory":"128G"},"used":{"limits.cpu":"28","limits.memory":"73Gi","pods":"13","requests.cpu":"28","requests.memory":"73Gi"}}

编辑:这里的kubectl版本是1.24.1

然而,在另一台机器上(一台运行旧版本5.1.143932636的Windows机器(,我得到了完全不同的结果。

PS C:Userssa_a9_dst_validation> kubectl get accountquota account-name-quota -o jsonpath="{.status.total}"
map[hard:map[limits.cpu:256 limits.memory:256G pods:200 requests.cpu:64 requests.memory:128G] used:map[limits.cpu:27 lim
its.memory:72Gi pods:12 requests.cpu:27 requests.memory:72Gi]]

编辑:此机器的kubectl版本为1.18.2

结果看起来JSON在内部转换为PS自定义对象​在返回结果之前对其调用ToString()​

我的目标

我正在尝试将JSON结果转换为对象,即使用ConvertFrom-Json。有这样一个奇怪的字符串迫使我为它编写一个自定义解析器,而这不是我想要做的。你知道它为什么会这样做吗?如果是,有没有办法使用现有的Powershell函数来做到这一点?

事实证明,kubectl版本1.18.2确实是导致该问题的原因。当我将kubectl版本从1.24.2降级到1.18.2时,我可以重现这个问题。

感谢@mclayton、@MathiasR.Jessen和@mkulement0

最新更新