@@ -58,7 +58,7 @@ Function Compare-Module {
5858 $fmoParams.Add (" Name" , $Name )
5959 }
6060 Try {
61- $online = Find-Module @fmoParams
61+ $online = @ ( Find-Module @fmoParams )
6262 }
6363 Catch {
6464 Write-Warning " Failed to find online module(s). $ ( $_.Exception.message ) "
@@ -67,7 +67,7 @@ Function Compare-Module {
6767 $progParam.percentComplete = 80
6868 Write-Progress @progParam
6969
70- $data = $online | Where-Object {$installed.name -contains $_.name } |
70+ $data = ( $online ). Where ( {$installed.name -contains $_.name }) |
7171 Select-Object - property Name,
7272 @ {Name = " OnlineVersion" ; Expression = {$_.Version }},
7373 @ {Name = " InstalledVersion" ; Expression = {
@@ -78,15 +78,17 @@ Function Compare-Module {
7878 PublishedDate,
7979 @ {Name = " UpdateNeeded" ; Expression = {
8080 $name = $_.Name
81- # there could me multiple versions installed
82- $installedVersions = $installed.Where ( {$_.name -eq $name }).Version | Sort-Object
83- foreach ($item in $installedVersions ) {
84- If ($_.Version -gt $item ) {
85- $result = $True
86- }
87- else {
88- $result = $False
89- }
81+ # there could be multiple versions installed
82+ # only need to compare the last one
83+ $mostRecentVersion = $installed.Where ( {$_.name -eq $name }).Version |
84+ Sort-Object - Descending | Select-Object - first 1
85+
86+ # need to ensure that PowerShell compares version objects and not strings
87+ If ([version ]$_.Version -gt [version ]$mostRecentVersion ) {
88+ $result = $True
89+ }
90+ else {
91+ $result = $False
9092 }
9193 $result
9294 }
@@ -102,7 +104,6 @@ Function Compare-Module {
102104 else {
103105 Write-Warning " No local module or modules found"
104106 }
105-
106107 } # Progress
107108
108109 End {
0 commit comments