比较Powershell中的文件版本

时间:2017-09-14 15:11:35

标签: 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,因为FileVersion有时似乎包含额外数据。

它返回“文件是较低版本”,即使它与“属性”中显示的版本相同。

我是否需要执行其他操作才能将ProductVersion属性与字符串进行比较?

2 个答案:

答案 0 :(得分:2)

您不能将该属性与字符串进行比较。从字符串创建[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"
}

答案 1 :(得分:0)

PowerShell功能不像典型的其他语言功能那样工作。你不会"返回"一个值。而是将其输出到管道以进行显示或使用写入输出进一步处理。如果正确执行,输出将是一个实际的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