PowerShell 解析 INF 文件
PowerShell Parse INF file
我正在尝试解析 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
.
一个文件可能包含多行 DriverVer=...
,但我只对第一个实例感兴趣。
现在我有以下脚本。
$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
但我只是在寻找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 }
正则表达式分解:
DriverVer\s*=\s*
匹配字符串 "DriverVer" 后跟任意数量的空格、等号和任意数量的空格。
(?:\d+/\d+/\d+,)?
匹配非捕获组 ((?:...)
) 中后跟逗号的可选日期。
(.*)
匹配该行的其余部分,即您要提取的版本号。没有 ?:
的括号使其成为捕获组。
另一种选择(如果版本号始终以日期开头)是仅在逗号和 select 最后一个字段(索引 -1)处拆分行:
Get-Content $path |
Where-Object { $_ -like 'DriverVer*' } |
Select-Object -First 1 |
ForEach-Object { $_.Split(',')[-1] }
我正在尝试解析 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
.
一个文件可能包含多行 DriverVer=...
,但我只对第一个实例感兴趣。
现在我有以下脚本。
$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
但我只是在寻找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 }
正则表达式分解:
DriverVer\s*=\s*
匹配字符串 "DriverVer" 后跟任意数量的空格、等号和任意数量的空格。(?:\d+/\d+/\d+,)?
匹配非捕获组 ((?:...)
) 中后跟逗号的可选日期。(.*)
匹配该行的其余部分,即您要提取的版本号。没有?:
的括号使其成为捕获组。
另一种选择(如果版本号始终以日期开头)是仅在逗号和 select 最后一个字段(索引 -1)处拆分行:
Get-Content $path |
Where-Object { $_ -like 'DriverVer*' } |
Select-Object -First 1 |
ForEach-Object { $_.Split(',')[-1] }