2017-03-23 12 views
0
$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 

큰 코드에 추가하기 전에이 작은 코드를 테스트하려고합니다. 그러나 $ OEM은 DriverVer = 12/21/2015,10.18.10.4358로 돌아 오더라도 $ OEM은 계속 거짓으로 나타납니다. 내가 무엇을보고 있는지에 관해 명확히하지 않고있다. 그러나 그것은 밤에 꽤 늦었다. 어떤 도움을 주시면 감사하겠습니다. . ^^ "는powershell에서 inf 파일을 가져옵니다.

답변

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) 
+0

정보를 제공해 주셔서 감사합니다. 나는 아직도 당신이 사용할 수있는 모든 명령을 사용하여 PowerShell에 조금 새로운 것입니다. 나는 물건을 복잡하게 만드는 경향이 있습니다. 길고 짧은 HP 드라이버를 사용하면 OEM inf를 실행하여 인텔 드라이버를 설치할 수 없습니다. 이 문제를 해결하기위한 쉬운 방법은 폴더에서 해당 inf를 이동하는 것입니다. 그러면 인텔 드라이버를 원격으로 설치할 수 있습니다. 4,000 대의 네트워크 컴퓨터를 사용할 때이 문제를 해결하는 가장 쉬운 방법입니다. 롤. – Wafflez19