PowerShell高级CSV过滤:VMware PowerCLI导出文件的分类处理及字段解析问题
PowerShell新手:处理vCenter导出CSV中的GUEST字段生成报表
别担心,我来一步步教你搞定这个问题,完全适合新手上手!核心思路就是先把GUEST字段里混在一起的服务器名和操作系统拆分开,之后筛选就简单多了。
第一步:导入CSV并拆分GUEST字段
先把原始CSV导入,同时把GUEST列拆成服务器全名和操作系统两个独立列,顺便把你已经在用的过滤条件加上(排除SharePoint相关文件夹、物理机备注):
# 导入数据并处理字段 $processedData = Import-CSV -Path "E:\esxi.csv" | # 保留原有所有列,新增两个拆分后的列 Select-Object *, @{Name='ServerFullName'; Expression={$_.GUEST -split ':' | Select-Object -First 1}}, @{Name='OperatingSystem'; Expression={$_.GUEST -split ':' | Select-Object -Skip 1}} | # 应用你的过滤规则 Where-Object { $_.Folder -notlike '*SharePoint*' -and $_.Notes -notlike '*Physical*' -and $_.Notes -notlike '*Sharepoint*' }
小提示:先测试再导出
在导出之前,你可以先运行下面的命令看看拆分结果对不对,避免出错:
$processedData | Select-Object Name, ServerFullName, OperatingSystem | Format-Table
第二步:生成同操作系统的报表
比如你要筛选所有Windows Server 2016的服务器,直接用拆分后的OperatingSystem列过滤就行(如果有多个操作系统用分号分隔,-like会自动匹配包含目标系统的条目):
# 导出Windows Server 2016服务器报表 $processedData | Where-Object { $_.OperatingSystem -like '*Microsoft Windows Server 2016*' } | Export-Csv "E:\windows_2016_servers.csv" -NoTypeInformation
如果怕大小写不匹配(比如有的写windows server 2016),可以用不区分大小写的匹配:
Where-Object { $_.OperatingSystem -ilike '*windows server 2016*' }
第三步:生成同域名的报表
要筛选somedomain.com的服务器,用拆分后的ServerFullName列就行。如果想精准匹配以该域名结尾的服务器(避免类似othersomedomain.com的误匹配),可以用两种方式:
方式1:简单直观的模糊匹配(适合新手)
# 导出somedomain.com域名的服务器报表 $processedData | Where-Object { $_.ServerFullName -like '*somedomain.com*' } | Export-Csv "E:\somedomain_servers.csv" -NoTypeInformation
方式2:精准的正则匹配(更严谨)
如果想确保只匹配以.somedomain.com结尾的服务器,用正则表达式:
$processedData | Where-Object { $_.ServerFullName -match '\.somedomain\.com$' } | Export-Csv "E:\somedomain_servers.csv" -NoTypeInformation
额外新手技巧
- 处理异常格式:如果有的
GUEST字段没有冒号(格式不规范),可以给计算属性加个判断,避免出现空值:
@{Name='ServerFullName'; Expression={ if ($_.GUEST -contains ':') { $_.GUEST -split ':' | Select-Object -First 1 } else { $_.GUEST } # 如果没有冒号,直接用原内容 }}
- 分步执行:把命令拆成小段执行,比如先导入并拆分,查看结果没问题后再进行筛选和导出,这样更容易排查错误。
- 查看列名:如果不确定CSV里的列名,导入后可以用
$processedData | Get-Member查看所有列的名称和类型。
内容的提问来源于stack exchange,提问作者Yukaputz Mike
相关产品推荐
相关产品推荐

