Powershell 在文件上选择字符串添加了不需要的元数据

Powershell 在文件上选择字符串添加了不需要的元数据

我正在尝试过滤包含用户帐户的文件中的服务帐户,每行一个:

"svc.test"
"test.user"
"test.user2"

Select-String 添加了不需要的元数据:

C:\Output> select-string -Path C:\Output\tmp.csv 'svc' -NotMatch   
tmp.csv:415:"test.user"  
tmp.csv:416:"test.user2"

我只是想:

"test.user"  
"test.user2"

我该怎么做呢?

--- 更新 --- 这是 Get-Member cmdlet 的结果:

 PS C:\Output> select-string -Path C:\Output\tmp.csv 'svc' -NotMatch|get-member


   TypeName: Microsoft.PowerShell.Commands.MatchInfo

Name         MemberType Definition                                                       
----         ---------- ----------                                                       
Equals       Method     bool Equals(System.Object obj)                                   
GetHashCode  Method     int GetHashCode()                                                
GetType      Method     type GetType()                                                   
RelativePath Method     string RelativePath(string directory)                            
ToString     Method     string ToString(), string ToString(string directory)             
Context      Property   Microsoft.PowerShell.Commands.MatchInfoContext Context {get;set;}
Filename     Property   string Filename {get;}                                           
IgnoreCase   Property   bool IgnoreCase {get;set;}                                       
Line         Property   string Line {get;set;}                                           
LineNumber   Property   int LineNumber {get;set;}                                        
Matches      Property   System.Text.RegularExpressions.Match[] Matches {get;set;}        
Path         Property   string Path {get;set;}                                           
Pattern      Property   string Pattern {get;set;}                                        
 

我需要数据。如何将线属性数据输出到文件?

答案1

这是做事的一种方法。[咧嘴笑] Select-Stringcmdlet 总是包含大量元数据以及匹配项。对象类型是matchinfo,不是string,因此您需要获取价值您想要的...在这种情况下,该值包含在.Line对象的属性中。

代码的作用是什么……

  • 设置要使用的文件名
  • 创建要排除的项目列表
  • 创建一个正则表达式或该列表的
    cmdletS-S默认使用-Pattern参数进行匹配...并使用正则表达式模式。
  • 创建一个要使用的文件
  • 使用Select-String文件作为输入、正则表达式模式和-NotMatch开关参数来反转匹配
  • .Line获取每个对象的属性值
  • 将其发送到$Result收藏夹
  • 在屏幕上显示该集合

代码 ...

$FileName = "$env:TEMP\wirelessben_S-S_Demo.txt"

$ExcludeList = @(
    'line'
    'five'
    'seven'
    )
$RegexEL = $ExcludeList -join '|'

#region >>> create a file to work with
@'
the first line
2nd line, this one is
a third line
the fourth goes forth
one, two, five ... THREE sir!
the number of this line is six
seven
eight
number nine, number nine
'@ | Set-Content -LiteralPath $FileName
#endregion >>> create a file to work with


$Result = (Select-String -LiteralPath $FileName -Pattern $RegexEL -NotMatch).Line

$Result

输出 ...

the fourth goes forth
eight
number nine, number nine

请注意,任何包含linefive或的行seven都会被排除。

相关内容