You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

额外新手技巧

  1. 处理异常格式:如果有的GUEST字段没有冒号(格式不规范),可以给计算属性加个判断,避免出现空值:
@{Name='ServerFullName'; Expression={
    if ($_.GUEST -contains ':') { $_.GUEST -split ':' | Select-Object -First 1 }
    else { $_.GUEST } # 如果没有冒号,直接用原内容
}}
  1. 分步执行:把命令拆成小段执行,比如先导入并拆分,查看结果没问题后再进行筛选和导出,这样更容易排查错误。
  2. 查看列名:如果不确定CSV里的列名,导入后可以用$processedData | Get-Member查看所有列的名称和类型。

内容的提问来源于stack exchange,提问作者Yukaputz Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:43:10