PowerShell将CSV拆分为单独的文件

时间:2015-12-11 22:08:10

标签: csv powershell

我有一个包含两列的CSV文件。

示例数据:

Computername,Collection Name
MyServer01,NA - Data - SRV - Patching - Prod - Sat 18:00
MyServer02,NA - Data - SRV - Patching - Prod - Sat 22:00
MyServer03,NA - Data - SRV - Patching - Prod - Sat 02:00
MyServer04,NA - Data - SRV - Patching - Prod - Fri 18:00
MyServer05,NA - Data - SRV - Patching - Prod - Fri 02:00
MyServer06,NA - Data - SRV - Patching - Prod - Sun 18:00

我希望将CSV拆分为集合中的单独文件。如上例所示,周六18:00

到目前为止,我有代码:

$data=Import-Csv .\servers2.csv

$data | Where-Object {$_ -like '*fri*' -and $_.'Collection Name' -notmatch 'all.da.servers'} | Select ComputerName,'Collection Name'

最终目标是基于集合的多个文本文件。所以Servers-Fri-1800.txtFri-1800.txt。服务器名称将存在于Servers * .txt中,而Fri-1800.txt将包含格式为12-11-15 18:00

的日期

我想先问一下,因为有些东西告诉我这种方法可能非常无穷无尽。 -Thanks !!

-Edit,所需的输出。 **值得注意的是,这些文本文件将被另一个Powershell脚本读取,因此认为具有过滤属性的PSCustom对象的理由是理想的。

Servers-Sat-1800.txt包含MyServer01Sat-1800.txt包含12-11-15 18:00 Servers-Sat-2200.txt包含MyServer02Sat-2200.txt包含12-11-15 22:00

-edit 2,添加代码预览。有没有更简单的方法来实现这一目标?

$data = import-csv .\file.csv

$data | Where-Object {$_ -like '*sat?18:00*' -and $_.'Collection Name' -notmatch 'ignore.string'} |

% {"{0}" -f $_.Computername} | out-file Servers-Sat-1800.txt

1 个答案:

答案 0 :(得分:3)

尝试使用Group-Object命令。这是为了拍摄大量的物品并将它们组合在一起。

我拿了你的样本并做了几次迭代

PCName,Collection
MyServer01, NA - Data - SRV - Patching - Prod - Sat 18:00
MyServer02, NA - Data - SRV - Patching - Dev - Sat 18:00
MyServer03, NA - Data - SRV - Patching - Dev - Sat 18:00
MyServer04, NA - Data - SRV - Patching - Prod - Sat 18:00
MyServer05, NA - Data - SRV - Patching - Prod - Sat 20:00
MyServer06, NA - Data - SRV - Patching - Prod - Sat 20:00

将其保存为名为T:\ comps.csv的CSV。现在,为每个集合组织不同的CSV。

$groups = import-csv T:\comps.csv | Group-Object -Property Collection 

ForEach ($group in $groups){
 $name = $group.Name -replace ':',''
 $group | select PCName | Export-Csv -Path "t:\$Name.csv"
}

不得不删除':'从集合名称,但最终结果是一堆CSV,名称正确,内部有正确的成员。

>dir t:\ *.csv

    Directory: T:\

Mode                LastWriteTime         Length Name                                                                                                                             
----                -------------         ------ ----                                                                                                                             
             12/11/2015   5:16 PM            375 comps.csv                                                                                                                        
-a----       12/11/2015   5:26 PM             98 NA - Data - SRV - Patching - Dev - Sat 1800.csv                                                                                  
-a----       12/11/2015   5:26 PM             99 NA - Data - SRV - Patching - Prod - Sat 1800.csv                                                                                 
-a----       12/11/2015   5:26 PM             98 NA - Data - SRV - Patching - Prod - Sat 2000.csv  

>gc 'T:\NA - Data - SRV - Patching - Dev - Sat 1800.csv'
#TYPE Selected.System.Management.Automation.PSCustomObject
"PCName"
"MyServer02"
"MyServer03"