Skip to content

Commit 0c951b2

Browse files
Fix version range quoting when value contains a variable
When -MinimumVersion or -MaximumVersion contains a variable reference (e.g. \), use double quotes for the version range string so the variable expands at runtime. Literal version strings continue to use single quotes. Before: -Version '(,\]' (broken - no expansion) After: -Version "(,\]" (correct - variable expands) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 6b90599 commit 0c951b2

2 files changed

Lines changed: 18 additions & 3 deletions

File tree

tool/migration/ConvertTo-PSResourceGet.ps1

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -347,15 +347,19 @@ function Convert-PSGetCommand {
347347
if ($null -ne $minimumVersion -and $null -ne $maximumVersion) {
348348
$minVal = $minimumVersion.Trim("'`"")
349349
$maxVal = $maximumVersion.Trim("'`"")
350-
$newParams.Add("-Version '[$minVal,$maxVal]'")
350+
# Use double quotes if the value contains a variable reference
351+
$quote = if ($minVal -match '\$' -or $maxVal -match '\$') { '"' } else { "'" }
352+
$newParams.Add("-Version $quote[$minVal,$maxVal]$quote")
351353
}
352354
elseif ($null -ne $minimumVersion) {
353355
$minVal = $minimumVersion.Trim("'`"")
354-
$newParams.Add("-Version '[$minVal,)'")
356+
$quote = if ($minVal -match '\$') { '"' } else { "'" }
357+
$newParams.Add("-Version $quote[$minVal,)$quote")
355358
}
356359
elseif ($null -ne $maximumVersion) {
357360
$maxVal = $maximumVersion.Trim("'`"")
358-
$newParams.Add("-Version '(,$maxVal]'")
361+
$quote = if ($maxVal -match '\$') { '"' } else { "'" }
362+
$newParams.Add("-Version $quote(,$maxVal]$quote")
359363
}
360364
}
361365

tool/migration/Tests/PSGetMigration.Tests.ps1

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,17 @@ Get-InstalledModule
170170
$result.ConvertedText | Should -Match "-Version '\[4\.0,5\.0\]'"
171171
}
172172

173+
It 'Uses double quotes for version range when value contains a variable' {
174+
$result = Invoke-ConvertFromScript -Script 'Install-Module -Name Pester -MaximumVersion $MaximumVersion'
175+
$result.ConvertedText | Should -Match '-Version "\(,\$MaximumVersion\]"'
176+
$result.ConvertedText | Should -Not -Match "'"
177+
}
178+
179+
It 'Uses double quotes for merged version range with variables' {
180+
$result = Invoke-ConvertFromScript -Script 'Install-Module -Name Pester -MinimumVersion $MinVer -MaximumVersion $MaxVer'
181+
$result.ConvertedText | Should -Match '-Version "\[\$MinVer,\$MaxVer\]"'
182+
}
183+
173184
It 'Converts -AllVersions to -Version wildcard' {
174185
$result = Invoke-ConvertFromScript -Script 'Find-Module -Name Az -AllVersions'
175186
$result.ConvertedText | Should -Match "-Version '\*'"

0 commit comments

Comments
 (0)