2017-09-14 63 views
0

我試圖用下面的代碼來比較一個文件的版本與指定的版本,並告訴我哪一個更高。比較Powershell中的文件版本

function Get-FileVersionInfo    
{    
    param(   
    [Parameter(Mandatory=$true)]    
    [string]$FileName)    

    if(!(test-path $filename)) {    
    write-host "File not found"    
    return $null    
    }    

    return [System.Diagnostics.FileVersionInfo]::GetVersionInfo($FileName)    

} 

$file = Get-FileVersionInfo("C:\program files\internet explorer\iexplore.exe") 


if($file.ProductVersion -gt "11.00.9600.17840") { 
    echo "file is higher version" 
} 
elseif($file.ProductVersion -eq "11.00.9600.17840") { 
    echo "file is equal version" 
} 
else { 
    echo "file is lower version" 
} 

echo "Product version is:" $file.ProductVersion 

僅使用ProductVersion代替FileVersion的FYI,因爲FileVersion有時似乎包含額外的數據。

它返回「文件是較低版本」,即使這是屬性中顯示的相同版本。

我是否需要做其他事情才能將ProductVersion屬性與字符串進行比較?

+1

所有你所要做的就是鑄造你的版本字符串版本'如果($ file.ProductVersion -gt [版] 「11.00.9600.17840」){' – LotPings

+0

@Joey,我也測試了一下,在這裏作品。 $文件是'TypeName:System.Diagnostics.FileVersionInfo'而不是字符串。 – LotPings

回答

1

您不會將該屬性與字符串進行比較。從字符串中創建一個[System.Version] - 對象。

固定碼:

$version = [System.Version]::Parse("11.00.9600.17840") 
if($file.ProductVersion -gt $version) { 
    echo "file is higher version" 
} 
elseif($file.ProductVersion -eq $version) { 
    echo "file is equal version" 
} 
else { 
    echo "file is lower version" 
} 
+0

您也可以使用'ProductVersionRaw'來做到這一點。 – Joey

0

PowerShell函數並不像典型的其他語言功能工作。你不「回報」一個價值。而是將其輸出到Pipeline以供顯示或使用Write-Output進一步處理。如果你做得正確,輸出將是一個實際的System.Diagnostics.FileVersionInfo對象,你可以從中比較版本。請參閱下面的修訂代碼

function Get-FileVersionInfo    
{ 
    [CmdletBinding()]   
    param(   
    [Parameter(Mandatory=$true)]    
    [string]$FileName)    

    if(!(test-path $filename)) {    
    Write-Error "File not found" 
    }    

    Write-Output ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($FileName)) 

} 

$version = Get-FileVersionInfo -FileName "C:\Program Files\Internet Explorer\iexplore.exe" 
$version | Get-Member 

$version.FileMajorPart 
$version.FileMinorPart 
$version.FileVersion