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)
$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)