【发布时间】:2015-11-11 21:13:02
【问题描述】:
我正在使用 PowerShell 远程配置来自不同供应商的存储阵列。该脚本允许我毫无问题地连接到阵列。从那里我使用 REST API 调用或通过 plink.exe 远程 SSH 运行命令。这是我的问题。在使用 plink 时,我需要查询数组,然后根据输出有条件地执行操作。问题是输出以字符串格式返回。这给我带来了问题,因为我想对返回的字符串的部分进行排序和提取,并根据输出向用户提供选项。
示例 - 列出卷
if ($sel_vendor -eq 3){
$ibm_ex_vols = & $rem_ssh $rem_ssh_arg1 $rem_ssh_arg2 $array_user"@"$array_mgmt_ip "-pw" $readpass "lsvdisk"
foreach ($i in $ibm_ex_vols){
write-host $i
}
}
这是代码的输出
id name IO_group_id IO_group_name status mdisk_grp_id mdisk_grp_name capacity type FC_id FC_name RC_id RC_name vdisk_UID fc_map_count copy_count fast_write_state se_copy_count RC_change compressed_copy_count parent_mdisk_grp_id parent_mdisk_grp_name
0 Test1 0 io_grp0 online 0 SVC_SYSTEM_POOL 10.00GB striped 600507680C80004E980000000000074B 0 1 empty 1 no 0 0 SVC_SYSTEM_POOL
1 Test2 0 io_grp0 online 0 SVC_SYSTEM_POOL 10.00GB striped 600507680C80004E980000000000074C 0 1 empty 1 no 0 0 SVC_SYSTEM_POOL
2 Test3 0 io_grp0 online 0 SVC_SYSTEM_POOL 10.00GB striped 600507680C80004E980000000000074D 0 1 empty 1 no 0 0 SVC_SYSTEM_POOL
3 Test4 0 io_grp0 online 0 SVC_SYSTEM_POOL 10.00GB striped 600507680C80004E980000000000074E 0 1 empty 1 no 0 0 SVC_SYSTEM_POOL
我希望能够存储此信息,然后从 id 和 name 列中选择标题和数据。我能够使用 out-file 命令将数据输出到 txt 文件。一旦我这样做了,我就使用 Excel 使用带分隔符的固定选项将其转换为分隔文件。虽然这可行,但我需要找出一个动态解决方案。
【问题讨论】:
-
由于列的宽度会根据各种值的长度而变化(例如,具有长名称的系统使名称列比平时长),我要做的是执行正则表达式匹配捕获每个标题列表并包含空格,然后使用标题的长度来构造一个宽度分隔的正则表达式匹配,该匹配可以将每一行分解为一个带有值的 PSCustomObject,您将被设置为导出为 CSV 或做任何您想做的事情.
标签: powershell