@@ -55,68 +55,74 @@ function Install-ModuleIfNotInstalled()
5555 param (
5656 [string ]$moduleName ,
5757 [string ]$version ,
58- [string ]$repositoryUrl = $DefaultPSRepositoryUrl
58+ [string ]$repositoryUrl
5959 )
6060
61- # Check installed modules
62- $modules = (Get-Module - ListAvailable $moduleName )
63- if ($version -as [Version ]) {
64- $modules = $modules.Where ({ [Version ]$_.Version -ge [Version ]$version })
61+ # List of modules+versions we want to replace with internal feed sources for reliability, security, etc.
62+ $mirrorFeedOverrides = @ {
63+ ' powershell-yaml;0.4.7' = ' https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-tools/nuget/v2'
6564 }
6665
67- if ($modules.Count -eq 0 )
68- {
69- # Use double-checked locking to avoid locking when module is already installed
66+ try {
7067 $mutex = New-Object System.Threading.Mutex($false , " Install-ModuleIfNotInstalled" )
7168 $null = $mutex.WaitOne ()
7269
73- try {
74- # Check installed modules again after acquiring lock
75- $modules = (Get-Module - ListAvailable $moduleName )
76- if ($version -as [Version ]) {
77- $modules = $modules.Where ({ [Version ]$_.Version -ge [Version ]$version })
78- }
70+ # Check installed modules again after acquiring lock
71+ $modules = (Get-Module - ListAvailable $moduleName )
72+ if ($version -as [Version ]) {
73+ $modules = $modules.Where ({ [Version ]$_.Version -ge [Version ]$version })
74+ }
75+
76+ if ($modules.Count -gt 0 )
77+ {
78+ Write-Host " Using module $ ( $modules [0 ].Name) with version $ ( $modules [0 ].Version) ."
79+ return $modules [0 ]
80+ }
7981
80- if ($modules.Count -eq 0 )
81- {
82- $repositories = (Get-PSRepository ).Where ({ $_.SourceLocation -eq $repositoryUrl })
83- if ($repositories.Count -eq 0 )
84- {
85- Register-PSRepository - Name $repositoryUrl - SourceLocation $repositoryUrl - InstallationPolicy Trusted
86- $repositories = (Get-PSRepository ).Where ({ $_.SourceLocation -eq $repositoryUrl })
87- if ($repositories.Count -eq 0 ) {
88- Write-Error " Failed to register package repository $repositoryUrl ."
89- return
90- }
91- }
92- $repository = $repositories [0 ]
93-
94- if ($repository.InstallationPolicy -ne " Trusted" ) {
95- Set-PSRepository - Name $repository.Name - InstallationPolicy " Trusted"
96- }
97-
98- Write-Host " Installing module $moduleName with min version $version from $repositoryUrl "
99- # Install under CurrentUser scope so that the end up under $CurrentUserModulePath for caching
100- Install-Module $moduleName - MinimumVersion $version - Repository $repository.Name - Scope CurrentUser - Force
101-
102- # Ensure module installed
103- $modules = (Get-Module - ListAvailable $moduleName )
104- if ($version -as [Version ]) {
105- $modules = $modules.Where ({ [Version ]$_.Version -ge [Version ]$version })
106- }
107-
108- if ($modules.Count -eq 0 ) {
109- Write-Error " Failed to install module $moduleName with version $version "
110- return
111- }
82+ $repositoryUrl = if ($repositoryUrl ) {
83+ $repositoryUrl
84+ } elseif ($mirrorFeedOverrides.Contains (" ${moduleName} ;${version} " )) {
85+ $mirrorFeedOverrides [" ${moduleName} ;${version} " ]
86+ } else {
87+ $DefaultPSRepositoryUrl
88+ }
89+
90+ $repositories = (Get-PSRepository ).Where ({ $_.SourceLocation -eq $repositoryUrl })
91+ if ($repositories.Count -eq 0 )
92+ {
93+ Register-PSRepository - Name $repositoryUrl - SourceLocation $repositoryUrl - InstallationPolicy Trusted
94+ $repositories = (Get-PSRepository ).Where ({ $_.SourceLocation -eq $repositoryUrl })
95+ if ($repositories.Count -eq 0 ) {
96+ Write-Error " Failed to register package repository $repositoryUrl ."
97+ return
11298 }
11399 }
114- finally {
115- $mutex.ReleaseMutex ()
100+ $repository = $repositories [0 ]
101+
102+ if ($repository.InstallationPolicy -ne " Trusted" ) {
103+ Set-PSRepository - Name $repository.Name - InstallationPolicy " Trusted"
116104 }
105+
106+ Write-Host " Installing module $moduleName with min version $version from $repositoryUrl "
107+ # Install under CurrentUser scope so that the end up under $CurrentUserModulePath for caching
108+ Install-Module $moduleName - MinimumVersion $version - Repository $repository.Name - Scope CurrentUser - Force
109+
110+ # Ensure module installed
111+ $modules = (Get-Module - ListAvailable $moduleName )
112+ if ($version -as [Version ]) {
113+ $modules = $modules.Where ({ [Version ]$_.Version -ge [Version ]$version })
114+ }
115+
116+ if ($modules.Count -eq 0 ) {
117+ Write-Error " Failed to install module $moduleName with version $version "
118+ return
119+ }
120+
121+ Write-Host " Using module $ ( $modules [0 ].Name) with version $ ( $modules [0 ].Version) ."
122+ } finally {
123+ $mutex.ReleaseMutex ()
117124 }
118125
119- Write-Host " Using module $ ( $modules [0 ].Name) with version $ ( $modules [0 ].Version) ."
120126 return $modules [0 ]
121127}
122128
0 commit comments