2017-09-14 2 views
0

Ich versuche, den folgenden Code zu verwenden, um die Version einer Datei mit einer bestimmten Version zu vergleichen, und sagen Sie mir, welche höher ist.Dateiversionen in Powershell vergleichen

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 mit ProductVersion anstelle von FileVersion, da FileVersion manchmal zusätzliche Daten enthält.

Es gibt "Datei ist eine niedrigere Version" zurück, obwohl das die gleiche Version ist, die in den Eigenschaften angezeigt wird.

Muss ich etwas anderes tun, damit die ProductVersion-Eigenschaft mit einer Zeichenfolge verglichen wird?

+1

Alles, was Sie zu tun haben, ist Ihre Version String als Version 'if ($ file.ProductVersion -gt [Version] "11.00.9600.17840") Gießen {' – LotPings

+0

@Joey, ich habe es nicht getestet, hier funktioniert. $ file hat 'TypeName: System.Diagnostics.FileVersionInfo' und keine Zeichenkette. – LotPings

Antwort

1

Sie vergleichen diese Eigenschaft nicht mit einer Zeichenfolge. Erstellen Sie ein [System.Version] -Objekt aus der Zeichenfolge.

fester Code:

$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

Sie können auch 'ProductVersionRaw' verwenden, die dies tut. – Joey

0

Powershell-Funktionen funktionieren nicht wie typische andere Sprachfunktionen. Sie geben keinen Wert zurück. Sie geben es stattdessen zur Anzeige oder Weiterverarbeitung über Write-Output an die Pipeline aus. Wenn Sie es richtig machen, wird die Ausgabe ein tatsächliches System.Diagnostics.FileVersionInfo-Objekt sein, von dem Sie Versionen vergleichen können. Siehe überarbeiteten Code unten.

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 
Verwandte Themen