powershell从inf文件中提取变量

时间:2017-03-23 06:20:05

标签: powershell powershell-v3.0 ps1

$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

所以我尝试在将这个小代码添加到我的大型脚本之前测试它。然而,即使$ Driver的数据以DriverVer = 12/21 / 2015,10.18.10.4358的形式返回,$ OEM也会出现错误。不知道我在看什么但是已经很晚了。任何帮助,将不胜感激。 ^^"

1 个答案:

答案 0 :(得分:0)

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)