2017-09-14 83 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 

FYIはFileVersionの代わりにProductVersionを使用していますが、FileVersionに余分なデータが含まれているように見えることがあります。

プロパティに表示されるのと同じバージョンであっても、「ファイルは下位バージョンです」を返します。

ProductVersionプロパティと文字列を比較するために何か他の処理を行う必要がありますか?

+1

あなたがするしたすべてのバージョン 'もし($ file.ProductVersion -gt [バージョン] "11.00.9600.17840"){' – LotPings

+0

@Joeyとしてバージョン文字列をキャストされて、私はここで、それをテストし、それをやりました働く$ fileは '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の機能は、一般的な他の言語の関数のように動作しません。値を「返す」ことはありません。代わりに、表示または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 
関連する問題