@@ -313,30 +313,53 @@ task RestorePsesModules -After Build {
313
313
# Save each module in the modules.json file
314
314
foreach ($moduleName in $moduleInfos.Keys )
315
315
{
316
- if (Test-Path - Path (Join-Path - Path $submodulePath - ChildPath $moduleName ))
316
+ $moduleInstallPath = (Join-Path - Path $subModulePath - ChildPath $moduleName )
317
+
318
+ if (-not (Test-Path - Path $moduleInstallPath ))
317
319
{
318
- Write-Host " `t Module '${moduleName} ' already detected. Skipping"
319
- continue
320
- }
320
+ Write-Host " `t Installing module: ${moduleName} "
321
321
322
- $moduleInstallDetails = $moduleInfos [$moduleName ]
322
+ $moduleInstallDetails = $moduleInfos [$moduleName ]
323
323
324
- $splatParameters = @ {
325
- Name = $moduleName
326
- MinimumVersion = $moduleInstallDetails.MinimumVersion
327
- MaximumVersion = $moduleInstallDetails.MaximumVersion
328
- Repository = if ($moduleInstallDetails.Repository ) { $moduleInstallDetails.Repository } else { $DefaultModuleRepository }
329
- Path = $submodulePath
330
- }
324
+ $splatParameters = @ {
325
+ Name = $moduleName
326
+ MinimumVersion = $moduleInstallDetails.MinimumVersion
327
+ MaximumVersion = $moduleInstallDetails.MaximumVersion
328
+ Repository = if ($moduleInstallDetails.Repository ) { $moduleInstallDetails.Repository } else { $DefaultModuleRepository }
329
+ Path = $submodulePath
330
+ }
331
331
332
- if ($script :SaveModuleSupportsAllowPrerelease )
332
+ if ($script :SaveModuleSupportsAllowPrerelease )
333
+ {
334
+ $splatParameters += @ { AllowPrerelease = $moduleInstallDetails.AllowPrerelease }
335
+ }
336
+
337
+ Save-Module @splatParameters
338
+ }
339
+ else
333
340
{
334
- $splatParameters += @ { AllowPrerelease = $moduleInstallDetails .AllowPrerelease }
341
+ Write-Host " `t Module ' ${moduleName} ' already detected. "
335
342
}
336
343
337
- Write-Host " `t Installing module: ${moduleName} "
344
+ # Version number subfolders aren't supported in PowerShell < 5.0
345
+ # If the module is located in a subfolder, move the module files up one level and remove the (empty) subfolder.
346
+ $moduleFolderChildItems = Get-ChildItem - Path $moduleInstallPath - Force
338
347
339
- Save-Module @splatParameters
348
+ if ($moduleFolderChildItems.Count -eq 1 -and $moduleFolderChildItems [0 ].PSIsContainer)
349
+ {
350
+ Write-Host " `t Moving module '${moduleName} ' out of subfolder."
351
+
352
+ $moduleSubfolder = $moduleFolderChildItems [0 ].FullName
353
+
354
+ Get-ChildItem - Path $moduleSubfolder - Recurse - Force | Move-Item - Destination $moduleInstallPath - Force
355
+
356
+ if ($null -ne (Get-ChildItem - Path $moduleSubfolder - Recurse - Force))
357
+ {
358
+ throw " Cannot remove folder $moduleSubfolder because it is not empty!"
359
+ }
360
+
361
+ Remove-Item - Path $moduleSubfolder
362
+ }
340
363
}
341
364
Write-Host " `n "
342
365
}
0 commit comments