将管道中的项目导入数组
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
这就是我卡住的地方。我的目标如下:
仅将所有正则表达式命中的项目编号放入数组中。我只需要 FOAH 或 PRJ 号码。没有别的。
计算一下每个列表中有多少个。他们将在一天内收到多个相同项目的参赛作品。
获取每个项目的工作总分钟数。每篇15分钟。
将此数据导出到 CSV 文件以供进一步操作。
Select-String
生成 MatchInfo
个对象,其中 PowerShell 默认显示 Line
属性(Filename
、LineNumber
和 Line
处理文件时的属性)。要获得匹配项,您需要展开 Matches
属性,然后展开每个匹配项的 Value
属性:
Select-String ... |
Select-Object -Expand Matches |
Select-Object -Expand Value
此外,$matches
是一个 automatic variable。不要给它赋值。
我有一个包含一列信息的文本文件,它是通过 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
这就是我卡住的地方。我的目标如下:
仅将所有正则表达式命中的项目编号放入数组中。我只需要 FOAH 或 PRJ 号码。没有别的。
计算一下每个列表中有多少个。他们将在一天内收到多个相同项目的参赛作品。
获取每个项目的工作总分钟数。每篇15分钟。
将此数据导出到 CSV 文件以供进一步操作。
Select-String
生成 MatchInfo
个对象,其中 PowerShell 默认显示 Line
属性(Filename
、LineNumber
和 Line
处理文件时的属性)。要获得匹配项,您需要展开 Matches
属性,然后展开每个匹配项的 Value
属性:
Select-String ... |
Select-Object -Expand Matches |
Select-Object -Expand Value
此外,$matches
是一个 automatic variable。不要给它赋值。