Parsing PowerShell解析INF文件

Parsing PowerShell解析INF文件,parsing,powershell,powershell-ise,Parsing,Powershell,Powershell Ise,我正在尝试解析INF;具体来说,驱动程序版本将从文件中删除。我是PowerShell的新手,所以我只走了这么远 该文件如下所示: [Version] Signature = "$WINDOWS NT$" Class = Bluetooth ClassGuid = {e0cbf06c-cd8b-4647-bb8a-263b43f0f974} Provider = %PROVIDER_NAME% CatalogFile = ibtusb.cat DriverVer=11/0

我正在尝试解析INF;具体来说,驱动程序版本将从文件中删除。我是PowerShell的新手,所以我只走了这么远

该文件如下所示:

[Version]
Signature   = "$WINDOWS NT$"
Class       = Bluetooth
ClassGuid   = {e0cbf06c-cd8b-4647-bb8a-263b43f0f974}
Provider    = %PROVIDER_NAME%
CatalogFile = ibtusb.cat
DriverVer=11/04/2014,17.1.1440.02
CatalogFile=ibtusb.cat
最后第二行是我要找的信息。我正试图解析出
17.1.1440.02

一个文件可能包含多行
driver=…
,但我只对第一个实例感兴趣

现在我有以下脚本

$path = "C:\FilePath\file.inf"
$driverVersoin = Select-String -Pattern "DriverVer" -path $path
$driverVersoin[0] # lists only first instance of 'DriverVer'
$driverVersoin    # lists all of the instances with 'DriverVer'
输出为:

Filepath\file.inf:7:DriverVer=11/04/2014,17.1.1440.02

但是我只想让你的表达更具体,让你想要提取的部分成为一个捕获组

$pattern = 'DriverVer\s*=\s*(?:\d+/\d+/\d+,)?(.*)'
Select-String -Pattern $pattern -Path $path |
  select -Expand Matches -First 1 |
  % { $_.Groups[1].Value }
正则表达式细分:

  • driver\s*=\s*
    匹配字符串“driver”,后跟任意数量的空格、等号和任意数量的空格
  • (?:\d+/\d+/\d+,)?
    匹配非捕获组中的可选日期,后跟逗号(
    (?:…)
  • (.*)
    匹配行的其余部分,即要提取的版本号。不带
    ?:
    的括号使其成为捕获组
另一个选项(如果版本号前面总是有日期)是在逗号处拆分行,然后选择最后一个字段(索引-1):


谢谢,第一版效果很好。:)为了更好地理解,您可以分解第二个代码段吗?@MoA我在第二个代码段中将别名替换为完整的cmdlet名称。这应该使每一句话的作用显而易见。
Get-Content $path |
  Where-Object { $_ -like 'DriverVer*' } |
  Select-Object -First 1 |
  ForEach-Object { $_.Split(',')[-1] }