首页 > 解决方案 > 如何使用 power shell 过滤特定单词

问题描述

我想弄清楚谁在从 2008 年的打印服务器打印。我从服务器管理器生成了一个日志文件,现在将这些信息保存在一个 csv 文件中。我的目标是解析这些信息并将其导出到新的 csv 以找出唯一的关联user IDcomputer host name并且printer name,所有这些都包含在 csv 日志文件中,这样我就可以确定谁正在从该服务器打印并确保我可以将它们映射到我们的新打印服务器。csv 由一列具有模式的数据组成。

csv 中的每一行都遵循以下模式,但每一行的措辞都不同,因为作业名称更长/更短或我不想要的其他信息。

整体格局是:

Document #, job name owned by **user ID** on **computer host name** was printed on **printer name** through port ********  

我不想要的更多信息

我的问题是我不能硬编码一些东西,比如忽略每行的前 5 个单词,然后第 6 个单词是用户 ID 等,因为每一行的格式都不同。

什么是我忽略所有单词的最佳方法,直到短语“拥有”甚至更好的用户 ID,将其保存到新的 csv 中,然后对计算机主机名和打印机名称执行相同的操作?

标签: powershellcsv

解决方案


使用正则表达式匹配可以很容易地做到这一点。正则表达式使用模式匹配,因此您可以执行以下操作:

Get-Content LogFile.csv | Where{$_ -match "^(.*?),.+? owned by (.+?) on (.+?) was printed on (.+?) through port (.+)"} | ForEach{
    [PSCustomObject]@{
        JobNumber=$Matches[1]
        UserId=$Matches[2]
        ComputerName=$Matches[3]
        PrinterName=$Matches[4]
        Port=$Matches[5]
    }
}|Export-Csv NewLogFile.csv -NoTypeInfo

这将为您提供一个 CSV,您可以在 Excel 中打开或仅包含作业编号、用户 ID、他们使用的计算机、它所使用的打印机以及它所使用的端口。


推荐阅读