2014-11-20 2 views
1

전 PowerShell 사용 경험이있는 InfoSec 관리자입니다. 이 항상 정확한 값을 반환하지 않기 때문에,WMIC에서 와일드 카드 사용 쿼리

([WMI] "\\$comp\root\CIMV2:CIM_DataFile.Name='$path'").Version) 

내가 파일 버전을 호출하는 대신 GET-항목 VersionInfo.ProductVersion를 사용하여이 작업을 사용 : 나는 짧고 달콤한하겠습니다. 잘 작동한다. 그러나 $ path가 다음과 같은 경우 :

C:\Windows\System32\Macromed\Flash\Flash*.ocx 

파일을 찾을 수 없기 때문에 쿼리가 작동하지 않습니다. 이것은 와일드 카드를 무시하는 변수 주위의 작은 따옴표 때문인 것 같습니다.

나는 여기에 내 문제에 주위 (JPBlanc에 의해 게시 답) 작품을 발견 한 것을 인정합니다

Powershell get-item VersionInfo.ProductVersion incorrect/different than WMI

그러나, 나는 나에게를 사용하는 것이 가능한 경우 알고 싶어를 와일드 카드 내 기존 스크립트.

답변

1

는 직접 와일드 카드를 전달할 수 없습니다,하지만 당신은 결과를 통해이 와일드 카드 파일 시스템 다음 루프를 조회 할 수 있습니다. 여기 두 경우 모두 당신이 이것을 원격으로하고 있다고 가정합니다.

invoke-command -computername $comp {Get-ChildItem C:\Windows\System32\Macromed\Flash\Flash*.ocx||foreach-object {write-output "$($_.Fullname): $(([WMI] "\\$comp\root\CIMV2:CIM_DataFile.Name='$($_.FullName)'").Version)"}; 

당신은 (당신도 첫 번째와 함께 할 수있는 원격 컴퓨터에있는 로컬 WMI 쿼리를 실행하여 후자 더 빨리 만들 수 있지만 :

$FlashFiles = invoke-command -computername $comp {Get-ChildItem C:\Windows\System32\Macromed\Flash\Flash*.ocx;}; 
foreach ($File in $FlashFiles) { 
    write-output "$($File.Fullname): $(([WMI] "\\$comp\root\CIMV2:CIM_DataFile.Name='$($File.FullName)'").Version)" 
} 

또는 하나의 파이프 라인을 함께 할 그것은 예쁘지 않습니다.)

invoke-command -computername $comp {Get-ChildItem C:\Windows\System32\Macromed\Flash\Flash*.ocx|foreach-object {write-output "$($_.Fullname): $(([WMI] "\\.\root\CIMV2:CIM_DataFile.Name='$($_.FullName)'").Version)"}}; 
+0

감사합니다. 이것이 제가 찾고 있던 것입니다. 나는 당신을 투표 하겠지만, 나의 명성은 충분히 높지 않습니다! – WKJ

0

CIM_DataFileName 속성에는 와일드 카드를 사용할 수 없습니다. 나는 그들 중 누구도 믿을 수 없다.

그러나 Drive, PathExtension이 목록을 얻으려면 지정할 수 있습니다

Get-WmiObject -ComputerName $comp -Class CIM_DataFile -Filter "Drive='C:' AND Path='\\Windows\\System32\\Macromed\\Flash\\' AND Extension='ocx'" 

Path의 구문은 조금 색다른이다. 예를 들어 후행 백 슬래시가 필요합니다.

은 또한 파이프 더 필터링 Where-Object로 할 수 있습니다

Get-WmiObject -ComputerName $comp -Class CIM_DataFile -Filter "Drive='C:' AND Path='\\Windows\\System32\\Macromed\\Flash\\' AND Extension='ocx'" |` 
Where-Object { $_.FileName -like 'Flash*' } |` 
ForEach-Object { $_.Name; $_.Version }