首页 > 解决方案 > 需要有关 power shell 脚本的帮助以过滤列上的 CSV 并在新工作表中显示过滤后的数据

问题描述

我是 power shell 的新手,但学习速度很快。到目前为止,我已经制作了一个脚本,它从 URL 获取数据并在桌面上创建一个 csv,然后我从 CSV 中删除第一行并将其作为 csv2 保存到桌面。我想过滤列并将过滤后的数据复制到新工作表中。我可能必须声明要查找过滤的数组值,我需要帮助。到目前为止,我已经制作了以下脚本: -

\此脚本用于下载资产分析服务器列表及其相应的站点地址和国家/地区,并将输出保存到 C:\Users\vtarwani\Desktop 上的 CSV。

Invoke-WebRequest -Uri "Link to URL" -OutFile "C:\Users\tarwaniv\Desktop\file1.csv"
    $import = get-content "C:\Users\tarwaniv\Desktop\file1.csv"
    $import | select-Object -Skip 1 | Set-Content "C:\Users\tarwaniv\Desktop\file2.csv"
    Import-csv -Path "C:\Users\tarwaniv\Desktop\file2.csv" -Header "#Active Servers", "Street Address" , "City", "Country" | Where-Object {$_.Country -eq "UNITED STATES"}

标签: powershell

解决方案


我同意@Theo 和@Olaf。这很难遵循。希望您能够构建这样的示例:

$WebFile = "C:\Users\tarwaniv\Desktop\file1.csv"
$Out_Dir = "C:\Users\tarwaniv\Desktop\"

$Headers = "#Active Servers", "Street Address" , "City", "Country"

Invoke-WebRequest -Uri "Link to URL" -OutFile $WebFile

Import-csv -Path $WebFile -Header  | 
Select-Object -Skip 1 |
Group-Object -Property Country |
ForEach-Object{
    $OutFile = $Out_Dir + $_.Name
    $_.Group | Export-Csv -Path $OutFile -NoTypeInformation
}

注意:-Skip在 Select 对象上使用参数应该跳过来自的第一条记录Import-Csv

用于Group-Object在国家/地区分组。这将输出它自己的对象,但 name 属性是您分组的对象,在本例中是 Country,并且 Group 属性中包含原始对象。所以我们可以使用这两个属性来命名一个输出文件,然后将对象导出到新的 Csv 文件。

如果您只想输出来自初始文件的列的子集。将-Property参数添加到Select-Object命令中,例如:

Select-Object -Skip 1 -Property <PropertiesToSelect>

注意:您可以声明一个类似于$Headers上面的属性数组。

如果您想对其他列进行顶级过滤,并假设它们包含在命令中,则只需在子句Select-Object上构建。Where-Object

请记住,我无法真正对此进行测试,因此请将其视为一个起点。这就是说让我知道结果如何。谢谢。


推荐阅读