Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 从目录导入多个CSV文件的更有效方法_Powershell_Csv - Fatal编程技术网

Powershell 从目录导入多个CSV文件的更有效方法

Powershell 从目录导入多个CSV文件的更有效方法,powershell,csv,Powershell,Csv,必须有一种更有效的方法将多个CSV文件从文件名包含服务_Results*.CSV的目录导入到一个具有唯一条目的变量中。我正在考虑循环遍历目录中所有与通配符匹配的文件名,然后只导入字段中Success所在的行 $Success0 = Import-Csv -Path "\\FILE05\Users\USER001\+Projects\Chrome\Services_Results.csv" | Where-Object {$_.Status -eq "Success"} $Success1 = I

必须有一种更有效的方法将多个CSV文件从文件名包含服务_Results*.CSV的目录导入到一个具有唯一条目的变量中。我正在考虑循环遍历目录中所有与通配符匹配的文件名,然后只导入字段中Success所在的行

$Success0 = Import-Csv -Path "\\FILE05\Users\USER001\+Projects\Chrome\Services_Results.csv" | Where-Object {$_.Status -eq "Success"}
$Success1 = Import-Csv -Path "\\FILE05\Users\USER001\+Projects\Chrome\Services_Results_150601.csv" | Where-Object {$_.Status -eq "Success"}
$Success2 = Import-Csv -Path "\\FILE05\Users\USER001\+Projects\Chrome\Services_Results_150602.csv" | Where-Object {$_.Status -eq "Success"} 
$Success3 = Import-Csv -Path "\\FILE05\Users\USER001\+Projects\Chrome\Services_Results_150602_b.csv" | Where-Object {$_.Status -eq "Success"} 
$Success4 = Import-Csv -Path "\\FILE05\Users\USER001\+Projects\Chrome\Services_Results_150602_c.csv" | Where-Object {$_.Status -eq "Success"}
$Success5 = Import-Csv -Path "\\FILE05\Users\USER001\+Projects\Chrome\Services_Results_150603_a.csv" | Where-Object {$_.Status -eq "Success"}

$PCList = $Success0 + $Success1 + $Success2 + $Success3 + $Success4 + $Success5
$PCList = $PCList.PC | sort -Unique
Write-host "PCList" $PCList.count

从获取帮助导入CSV:

-Path <String[]>
    Specifies the path to the CSV file to import. You can also pipe a path to Import-Csv.

    Required?                    false
    Position?                    1
    Default value                None
    Accept pipeline input?       true (ByValue)
    Accept wildcard characters?  false

使用PowerShell后台作业来加快进程如何?我还没有测试过这段代码,但是试着阅读并理解模式。我想,如果您正在导入大型CSV文件,您会很感激它能大大加快流程

### Create an empty array to hold Background Jobs.
$JobList = @();

### Get a list of CSV files.
$FileList = Get-ChildItem -Path \\FILE05\Users\USER001\+Projects\Chrome\*Services_Results*.csv;

foreach ($File in $FileList) {
    ### Start a new Background Job for each file
    $JobList += Start-Job -ScriptBlock { Import-Csv -Path $args[0] | Where-Object -FilterScript { $PSItem.Status -eq 'Success'; } } -ArgumentList $File.FullName -Name $File.Name;
}

### Wait for all the jobs to complete.
Wait-Job -Job $JobList;

### Receive the results of the jobs.
$ResultList = Receive-Job -Job $JobList;

我认为,您可以用您已经在做的方式很巧妙地做您想做的事情,但是使用通配符和ForEach循环:

$files = Get-ChildItem "\\FILE05\Users\USER001\+Projects\Chrome\*.csv"
$PCList = $files | ForEach { (Import-Csv $_ | Where Status -eq "Success") }

$PCList = $PCList | sort -Unique -Property PC
Write-Output $PCList
Write-Output $PCList.Count

$PCList.PC是包含PC名称的字段。当存在多个数据列时,我不知道如何创建唯一条目的列表。
$files = Get-ChildItem "\\FILE05\Users\USER001\+Projects\Chrome\*.csv"
$PCList = $files | ForEach { (Import-Csv $_ | Where Status -eq "Success") }

$PCList = $PCList | sort -Unique -Property PC
Write-Output $PCList
Write-Output $PCList.Count