powershell从inf文件中拉取变量

powershell pull variable from inf file

$OEM = "N/A"
$data = (get-content C:\Windows\INF\OEM27.inf | select-string "10.18.10.4358")
if ($data -eq "DriverVer=12/21/2015,10.18.10.4358"){
$OEM = $true}
else {$OEM = $false}
echo $data
echo $OEM

因此,在将这段小代码添加到我的大脚本之前,我正在尝试对其进行测试。然而,即使 $data 返回为 DriverVer=12/21/2015,10.18.10.4358,$OEM 仍会出现错误。不确定我在看什么,但已经很晚了。任何帮助,将不胜感激。 ^^

Select-String 返回的对象不是字符串。这是一个 MatchInfo:

C:\> $data | 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;}

您可以找到它与 Line 属性 匹配的行。因此,将您的代码更改为:

if ($data.Line -eq "DriverVer=12/21/2015,10.18.10.4358")

但是,我认为这不是非常可靠的代码,因为 INI 文件可以在“=”两边留有空格。这样会更好:

if ($data.Line -match "DriverVer\s*=\s*12/21/2015,10.18.10.4358")

我认为您的代码有点过于复杂。你可以用这个替换整个东西:

$OEM = [bool](Select-String "DriverVer\s*=\s*12/21/2015,10.18.10.4358" C:\Windows\INF\OEM27.inf)