我正在尝试使用以下代码将文件的版本与指定版本进行比较,并告诉我哪个版本更高。
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属性与字符串进行比较?
答案 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