将管道中的项目导入数组

Import the items from the pipeline in to an array

我有一个包含一列信息的文本文件,它是通过 CSV 导入的。

#TODO: Initialize Form Controls here         
$Date = (Get-Date -Format "MM-dd-yyyy")      
$DateTime = (Get-Date)                       
$Projects = Import-Csv c:\temp\pm_project.csv
#Show me the entire list of Projects         
$Projects
数字
------
FOAH18
FOAH278
FOAH313
PRJ0031905
PRJ0031909
PRJ0032045

这些在下拉列表中选择并放置在文本文件中。他们还可以做出其他选择,例如管理时间或其他非项目时间。

$Matches = Get-Content "c:\temp\timesheet$Date.txt" 
#Show me all the entries in the text file            
$Matches                                             
11/06/2017 18:45:56 - 这 15 分钟专用于项目 ID FOAH18
11/06/2017 18:45:58 - 这 15 分钟专用于项目 ID FOAH278
11/06/2017 18:45:59 - 这 15 分钟专用于项目 ID FOAH313
11/06/2017 18:46:14 - 这 15 分钟用于管理职能
11/06/2017 18:46:18 - 这 15 分钟专门用于维持功能
11/06/2017 18:46:18 - 这 15 分钟专门用于维持功能
11/06/2017 18:45:56 - 这 15 分钟专用于项目 ID PRJ0031905
11/06/2017 18:45:56 - 这 15 分钟专用于项目 ID PRJ0031909
11/06/2017 18:45:56 - 这 15 分钟专用于项目 ID PRJ0032045

我有一个正则表达式命令,可以提取包含项目 ID 号的行,从而在管道中生成以下内容。

#Show me only the lines in the test file that match the regex statement                                  
$Matches = Select-String -Path "C:\temp\TimeSheet$Date.txt" -Pattern '(?>FOAH|PRJ)\d{1,10}' -AllMatches 
$Matches  
$Matches.Count # This does show the proper amount of lines that match the regex command.
C:\temp\TimeSheet-06-2017.txt:1:11/06/2017 18:45:56 - 这 15 分钟专用于项目 ID FOAH18
C:\temp\TimeSheet-06-2017.txt:2:11/06/2017 18:45:58 - 这 15 分钟专用于项目 ID FOAH278
C:\temp\TimeSheet-06-2017.txt:3:11/06/2017 18:45:59 - 这 15 分钟专用于项目 ID FOAH313
C:\temp\TimeSheet-06-2017.txt:4:11/06/2017 18:46:00 - 这 15 分钟专用于项目 ID PRJ0031905
C:\temp\TimeSheet-06-2017.txt:5:11/06/2017 18:46:02 - 这 15 分钟专用于项目 ID PRJ0031909
C:\temp\TimeSheet-06-2017.txt:6:11/06/2017 18:46:03 - 这 15 分钟专用于项目 ID PRJ0032045

我确实从管道中导出了数据并得到了以下结果,但我不知道为什么我得到的是整行而不是正则表达式过滤器。

线
11/06/2017 18:45:56 - 这 15 分钟专用于项目 ID FOAH652
11/06/2017 18:45:58 - 这 15 分钟专用于项目 ID FOAH705
11/06/2017 18:45:59 - 这 15 分钟专用于项目 ID FOAH721
11/06/2017 18:46:00 - 这 15 分钟专用于项目 ID FOAH780
11/06/2017 18:46:02 - 这 15 分钟专用于项目 ID FOAH787
11/06/2017 18:46:03 - 这 15 分钟专用于项目 ID FOAH787

这就是我卡住的地方。我的目标如下:

  1. 仅将所有正则表达式命中的项目编号放入数组中。我只需要 FOAH 或 PRJ 号码。没有别的。

  2. 计算一下每个列表中有多少个。他们将在一天内收到多个相同项目的参赛作品。

  3. 获取每个项目的工作总分钟数。每篇15分钟。

  4. 将此数据导出到 CSV 文件以供进一步操作。

Select-String 生成 MatchInfo 个对象,其中 PowerShell 默认显示 Line 属性(FilenameLineNumberLine处理文件时的属性)。要获得匹配项,您需要展开 Matches 属性,然后展开每个匹配项的 Value 属性:

Select-String ... |
    Select-Object -Expand Matches |
    Select-Object -Expand Value

此外,$matches 是一个 automatic variable。不要给它赋值。