powershell - 将带空单元格的格式化字符串输出转换为 PS 对象
问题描述
我有一个命令的字符串输出,我试图将其转换为面向对象的 PSObject。输出如下所示:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
app1-iscsi-pvc0 Bound app1-iscsi-pv0 100Gi RWO 236d Filesystem
app1-iscsi-pvc1 Bound app1-iscsi-pv1 5Gi RWO 236d Filesystem
app1-iscsi-pvc2 Bound app1-iscsi-pv2 5Gi RWO 236d Filesystem
mssql-iscsi-pvc Bound mssql-iscsi-pv0 100Gi RWO manual 310d Filesystem
my-claim Bound my-local-pv 2Gi RWO my-local-storage 242d Filesystem
app1.2-pvc-app1.2-0 Bound app1.2-pv0 50Gi RWO manual 309d Filesystem
app1.2-pvc-app1.2-1 Bound app1.2-pv1 50Gi RWO manual 309d Filesystem
app1.2-pvc-app1.2-2 Bound app1.2-pv2 50Gi RWO manual 309d Filesystem
app1.1-pvc-app1.1-0 Bound app1.1-pv0 100Gi RWO manual 308d Filesystem
app3-iscsi-xx-pvc0 Bound app3-iscsi-xx-pv0 5Gi RWO manual 77d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 109d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-xxx-pvc0 Bound app3-iscsi-xxx-pv0 5Gi RWO manual 97d Filesystem
app3-iscsi-xxxxx-pvc0 Bound app3-iscsi-xxxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-pvc0 Bound app3-iscsi-pv0 50Gi RWO 186d Filesystem
app3-iscsi2-pvc0 Bound app3-iscsi2-pv0 5Gi RWO manual 110d Filesystem
...我遇到的问题是存储类列中的空“单元格”。由于单元格为空,所有其他输出格式都与我正在使用的当前方法正确,但此输出除外。使用我现有的方法,其中有空单元格,以下数据最终出现在前一列中,因为我的拆分正在折叠空白空间。
这是我目前使用的代码:
$p = Invoke-Expression 'kubectl get pvc -o wide'
$o = @()
## Determine header column. The '\s{2,}' is to match everything with > 2 spaces in succession
$h = ($p[0] -replace '\s{2,}', '|||||') -split '|||||',0,"simplematch"
for ($i = 1; $i -lt $p.Count; $i++) {
$e = ($p[$i] -replace '\s{2,}', '|||||') -split '|||||',0,"simplematch"
$t = New-Object pscustomobject
## Add each member from the two different arrays into the psobject
for ($x=0; $x -lt $h.Count; $x++) {
$t | Add-Member -MemberType NoteProperty -Name $h[$x].Replace(' ', '_') -Value $e[$x]
}
$o += $t
}
$o | ft
...是否有人知道解决将可变间距输出(有时是空单元格)可靠地转换为 psobject 的策略?蒂亚!
解决方案
使用此ConvertFrom-SourceTable
cmdlet:
$Table = '
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
app1-iscsi-pvc0 Bound app1-iscsi-pv0 100Gi RWO 236d Filesystem
app1-iscsi-pvc1 Bound app1-iscsi-pv1 5Gi RWO 236d Filesystem
app1-iscsi-pvc2 Bound app1-iscsi-pv2 5Gi RWO 236d Filesystem
mssql-iscsi-pvc Bound mssql-iscsi-pv0 100Gi RWO manual 310d Filesystem
my-claim Bound my-local-pv 2Gi RWO my-local-storage 242d Filesystem
app1.2-pvc-app1.2-0 Bound app1.2-pv0 50Gi RWO manual 309d Filesystem
app1.2-pvc-app1.2-1 Bound app1.2-pv1 50Gi RWO manual 309d Filesystem
app1.2-pvc-app1.2-2 Bound app1.2-pv2 50Gi RWO manual 309d Filesystem
app1.1-pvc-app1.1-0 Bound app1.1-pv0 100Gi RWO manual 308d Filesystem
app3-iscsi-xx-pvc0 Bound app3-iscsi-xx-pv0 5Gi RWO manual 77d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 109d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-xxx-pvc0 Bound app3-iscsi-xxx-pv0 5Gi RWO manual 97d Filesystem
app3-iscsi-xxxxx-pvc0 Bound app3-iscsi-xxxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-pvc0 Bound app3-iscsi-pv0 50Gi RWO 186d Filesystem
app3-iscsi2-pvc0 Bound app3-iscsi2-pv0 5Gi RWO manual 110d Filesystem'
Load-Script ConvertFrom-SourceTable # If needed, accept the repository warning
$Data = ConvertFrom-SourceTable $Table
$Data |Format-Table
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
---- ------ ------ -------- ------------ ------------ --- ----------
app1-iscsi-pvc0 Bound app1-iscsi-pv0 100Gi RWO 236d Filesystem
app1-iscsi-pvc1 Bound app1-iscsi-pv1 5Gi RWO 236d Filesystem
app1-iscsi-pvc2 Bound app1-iscsi-pv2 5Gi RWO 236d Filesystem
mssql-iscsi-pvc Bound mssql-iscsi-pv0 100Gi RWO manual 310d Filesystem
my-claim Bound my-local-pv 2Gi RWO my-local-storage 242d Filesystem
app1.2-pvc-app1.2-0 Bound app1.2-pv0 50Gi RWO manual 309d Filesystem
app1.2-pvc-app1.2-1 Bound app1.2-pv1 50Gi RWO manual 309d Filesystem
app1.2-pvc-app1.2-2 Bound app1.2-pv2 50Gi RWO manual 309d Filesystem
app1.1-pvc-app1.1-0 Bound app1.1-pv0 100Gi RWO manual 308d Filesystem
app3-iscsi-xx-pvc0 Bound app3-iscsi-xx-pv0 5Gi RWO manual 77d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 109d Filesystem
app3-iscsi-xxxx-pvc0 Bound app3-iscsi-xxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-xxx-pvc0 Bound app3-iscsi-xxx-pv0 5Gi RWO manual 97d Filesystem
app3-iscsi-xxxxx-pvc0 Bound app3-iscsi-xxxxx-pv0 5Gi RWO manual 91d Filesystem
app3-iscsi-pvc0 Bound app3-iscsi-pv0 50Gi RWO 186d Filesystem
app3-iscsi2-pvc0 Bound app3-iscsi2-pv0 5Gi RWO manual 110d Filesystem
推荐阅读
- visual-studio-code - exec: "code": $PATH 中找不到可执行文件
- node.js - 我已经构建了一个带有 morgan 模块的 nodejs 应用程序作为记录器
- node.js - 如何在节点 OIDC 提供程序中使用令牌端点获取 access_token
- python - Multiprocessing.Process 运行整个脚本,而不仅仅是 python 中的目标函数
- arrays - 底层数组如何在 Golang 中的“切片”中表现
- pyspark - 如何在分组值上将一行的值与 PySpark 中的所有其他行进行比较
- php - php 中的 strip_tags 没有帮助,需要更好的选择
- javascript - ReactJS Canvas 没有 captureStream
- java - 引起:java.lang.ClassCastException:类 org.hibernate.jpa.HibernatePersistenceProvider
- windows - 如何使用 BAT 和 PUTTY 在 1000 个 SSH 会话中执行多命令?