【问题标题】:Advanced CSV Filtering in Powershell?Powershell中的高级CSV过滤?
【发布时间】:2021-12-06 10:37:37
【问题描述】:

我正在过滤来自我的 vCenter 上的电源 cli 的导出。我需要从 Vmware 从 powercli 创建的导出中生成两个 csv 文件。当我导出时,Esxi 会创建一个名为 GUEST 的列,然后在该列中填充“servername.somedomain.com:Microsoft Windows Servers 2016”,并根据操作系统类型用分号分隔。

我需要生成包含所有具有相同操作系统的服务器和相关列的 csv 报告,以及所有类似域服务器和相关列的报告。

导入 csv 不支持通配符,因此我无法过滤出 somedomain.com 也无法在输入时过滤 2016。我不知道下一步该转向哪个方向,我会欣赏或简明阅读更好的 powershell 技术来操纵 csv 文件中的数据以供假人使用?以下是我用来进行大部分过滤的内容,但我被困在上述单元格上。

 Import-CSV -Path "E:\esxi.csv | ? Folder -notlike *SharePoint*| ? Notes -notlike *Physical* | ? Notes -notlike *Sharepoint* | Export-Csv "E:\filtered.csv" -NoTypeInformation  

这是一个示例 csv 的链接。
https://drive.google.com/file/d/1DdqtVFVcZ0aFnoUDqB2ErNX_yA9LBO8H/view?usp=sharing

【问题讨论】:

  • "导入 csv 不支持通配符,所以我无法过滤掉 somedomain.com" - 你不需要通配符,你只是说它在GUEST 专栏? Import-Csv ... |? GUEST -notlike *somedomain.com*
  • 请直接在问题中发布您的示例数据的代表性部分(顺便说一句:链接的文件不可公开访问)并描述所需的输出。
  • Mathias,我明白你的意思了,不要试图过滤“为”我想要的东西,而是过滤掉其他所有东西......我会试一试。

标签: powershell csv vmware


【解决方案1】:

我需要生成所有具有相同操作系统的服务器的 csv 报告

您需要Group-Object - 它会根据某些属性表达式对输入对象进行分组,这正是您所需要的:

# Import CSV data
$data = Import-CSV -Path "E:\esxi.csv"

# Group by OS label (the substring following the last `:` in the GUEST column)
$OSGroups = $data |Group-Object { $_.GUEST -replace '^.*:(?=[^:]+$)'}

# Loop through the resulting groups and output a new CSV for each
foreach($OSGroup in $OSGroups){
  # Extract the OS name that we grouped on
  $OSName = $OSGroup.Name

  # Export relevant records to new CSV
  $OSGroup.Group |Export-Csv "PerOSReport_${OSName}.csv" -NoTypeInformation
}

【讨论】:

    猜你喜欢
    • 2013-04-08
    • 1970-01-01
    • 2022-01-09
    • 2021-01-15
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多