Powershell 迭代 System.Object
Powershell iterate System.Object
我在 PowerShell 脚本中使用 OpenShift CLI,
我有一个带数据的变量 $ProjectList。不确定它的数据类型,但是做 $ProjectsList.GetType() 给我下面的
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
正在寻找获取状态为 运行
的名称字段的方法
NAME READY STATUS AGE
Service One 0/1 Completed 13d
Service Two 0/1 Running 13d
Service 3 0/1 Running 13d
Service 4 0/1 Completed 13d
$ProjectList.Length
给我值5.
我正在寻找一种方法来获取名称的整体状态 运行。尝试了以下代码,但它不起作用。
$ProjectsList = c:\TEMP\oc.exe get pods
$FilteredList = $ProjectList.Where{ $_.STATUS -eq 'Running' }
write-host $FilteredList //This shows empty
你能帮我写一些伪代码吗?
您的查询不起作用,因为 CLI 默认输出 table 格式。因此,您的 $ProjectList
仅包含作为字符串数组的格式化文本输出,PowerShell 无法理解。
根据 docs, the CLI is able to output JSON format, by passing argument -o json
. This can easily be parsed into actual objects by using PowerShell's ConvertFrom-Json
cmdlet:
$ProjectsList = c:\TEMP\oc.exe get pods -o json | Out-String | ConvertFrom-Json
$FilteredList = $ProjectList.Where{ $_.STATUS -eq 'Running' }
Out-String
调用是因为 ConvertFrom-Json
在给定单个输入字符串时效果最好(最可预测的是 1)。重定向本机进程的输出时,您通常会将每一行 one-by-one 作为单独的字符串获取。使用 Out-String
确保管道中的下一个命令将输出接收为单个多行字符串。
1) 将多个字符串传递给 ConvertFrom-Json
.
时,请参阅 了解陷阱
我在 PowerShell 脚本中使用 OpenShift CLI,
我有一个带数据的变量 $ProjectList。不确定它的数据类型,但是做 $ProjectsList.GetType() 给我下面的
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
正在寻找获取状态为 运行
的名称字段的方法NAME READY STATUS AGE
Service One 0/1 Completed 13d
Service Two 0/1 Running 13d
Service 3 0/1 Running 13d
Service 4 0/1 Completed 13d
$ProjectList.Length
给我值5.
我正在寻找一种方法来获取名称的整体状态 运行。尝试了以下代码,但它不起作用。
$ProjectsList = c:\TEMP\oc.exe get pods
$FilteredList = $ProjectList.Where{ $_.STATUS -eq 'Running' }
write-host $FilteredList //This shows empty
你能帮我写一些伪代码吗?
您的查询不起作用,因为 CLI 默认输出 table 格式。因此,您的 $ProjectList
仅包含作为字符串数组的格式化文本输出,PowerShell 无法理解。
根据 docs, the CLI is able to output JSON format, by passing argument -o json
. This can easily be parsed into actual objects by using PowerShell's ConvertFrom-Json
cmdlet:
$ProjectsList = c:\TEMP\oc.exe get pods -o json | Out-String | ConvertFrom-Json
$FilteredList = $ProjectList.Where{ $_.STATUS -eq 'Running' }
Out-String
调用是因为 ConvertFrom-Json
在给定单个输入字符串时效果最好(最可预测的是 1)。重定向本机进程的输出时,您通常会将每一行 one-by-one 作为单独的字符串获取。使用 Out-String
确保管道中的下一个命令将输出接收为单个多行字符串。
1) 将多个字符串传递给 ConvertFrom-Json
.