@@ -58,7 +58,7 @@ Function Compare-Module {
58
58
$fmoParams.Add (" Name" , $Name )
59
59
}
60
60
Try {
61
- $online = Find-Module @fmoParams
61
+ $online = @ ( Find-Module @fmoParams )
62
62
}
63
63
Catch {
64
64
Write-Warning " Failed to find online module(s). $ ( $_.Exception.message ) "
@@ -67,7 +67,7 @@ Function Compare-Module {
67
67
$progParam.percentComplete = 80
68
68
Write-Progress @progParam
69
69
70
- $data = $online | Where-Object {$installed.name -contains $_.name } |
70
+ $data = ( $online ). Where ( {$installed.name -contains $_.name }) |
71
71
Select-Object - property Name,
72
72
@ {Name = " OnlineVersion" ; Expression = {$_.Version }},
73
73
@ {Name = " InstalledVersion" ; Expression = {
@@ -78,15 +78,17 @@ Function Compare-Module {
78
78
PublishedDate,
79
79
@ {Name = " UpdateNeeded" ; Expression = {
80
80
$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
90
92
}
91
93
$result
92
94
}
@@ -102,7 +104,6 @@ Function Compare-Module {
102
104
else {
103
105
Write-Warning " No local module or modules found"
104
106
}
105
-
106
107
} # Progress
107
108
108
109
End {
0 commit comments