Public/Import-OriAzBopPsd.ps1
<#
.SYNOPSIS Install PowerShell module from online gallery based on psd1 file It returns dependency tree .DESCRIPTION Install PowerShell module from online gallery based on psd1 file It returns dependency tree .PARAMETER DevOpsAccount The name of the dev ops account. Default value is 'oriflame' .PARAMETER RegisterPsRepoFeedList Powershell Repository feed to register if needed .PARAMETER RegisterNugetRepoFeedList Nuget Repository feed to register if needed .PARAMETER Repository Repository feed to register if needed for getting powershell modules. .PARAMETER Path Path to psd1 file .PARAMETER Credential Repository Credential if needed .PARAMETER SkipImport When is set Import-Module will be skipped .PARAMETER SleepInSec Sleep time in sec between test if the module is ready to import. .PARAMETER MaxRetry Max retry while waiting to import module .EXAMPLE $password = ConvertTo-SecureString 'xbchuuuuhaaaatest' -AsPlainText -Force $RepositoryCredential = New-Object System.Management.Automation.PSCredential 'feafeafae@mydomain.net',$password Import-OriAzBopPsd ` -Path $(Build.SourcesDirectory)\src\$(Build.Repository.Name).psd1 ` -Credential $RepositoryCredential #> function Import-OriAzBopPsd { [CmdLetBinding()] [OutputType([PSCustomObject])] param ( [Parameter(Mandatory = $false, HelpMessage = "The name of the dev ops account")] [String] $DevOpsAccount = $Script:VstsAccount, [Parameter(Mandatory = $false, HelpMessage = "Powershell Repository feed to register if needed")] [String[]] $RegisterPsRepoFeedList = @('PackageManagementFeed'), [Parameter(Mandatory = $false, HelpMessage = "Nuget Repository feed to register if needed")] [String[]] $RegisterNugetRepoFeedList = @('DeploymentPackages'), [Parameter(Mandatory = $false, HelpMessage = "Repository feed to register if needed for getting powershell modules")] [String] $Repository = 'PackageManagementFeed', [Parameter(Mandatory = $true, HelpMessage = "Path to psd1 file")] [ValidateScript( { Test-Path $_ })] [string] $Path, [Parameter(Mandatory = $false, HelpMessage = "Repository Credential if needed")] [PSCredential] $Credential = $null, [Parameter(Mandatory = $false, HelpMessage = "When is set import-module will be skipped.")] [switch] $SkipImport, [Parameter(Mandatory = $False, HelpMessage = "Sleep time in sec between test if the module is ready to import.")] [int] $SleepInSec = 10, [Parameter(Mandatory = $False, HelpMessage = "Max retry")] [int] $MaxRetry = 20 ) $ErrorActionPreference = 'Stop' Write-Verbose "-- Import-OriAzBopPsd --" Write-Verbose "Name: $Name" Write-Verbose "Path: $Path" Write-Verbose "Credential: $(ConvertTo-Json $Credential)" Write-Verbose "SkipImport: $($SkipImport.IsPresent)" Write-Verbose "SleepInSec: $SleepInSec" Write-Verbose "MaxRetry: $MaxRetry" # Swich Default protol security to TLS12 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # Fix credential provider Invoke-OriAzExrExceptionRetry ` -ListedExceptions @('*') ` -MaxRetry 60 ` -SleepTimeInSec 60 ` -ScriptBlockToRun { Invoke-WebRequest -Uri "https://raw.githubusercontent.com/microsoft/artifacts-credprovider/master/helpers/installcredprovider.ps1" -UseBasicParsing | Invoke-Expression 6> $null } Install-OriAzBopPrerequisity -Name PowerShellGet -MinimumVersion 2.2.3 -SkipImport:$SkipImport -AllowClobber -SkipPublisherCheck Install-OriAzBopPrerequisity -Name PackageManagement -MinimumVersion 1.4.6 -SkipImport:$SkipImport -AllowClobber -SkipPublisherCheck # Required module needs to be installed and imported Register-OriAzBopRepository ` -DevOpsAccount $DevOpsAccount ` -RepositoryCredential $Credential ` -PsProjectName $RegisterPsRepoFeedList ` -NugetProjectName $RegisterNugetRepoFeedList ` -SkipPrompt:$true ` -Verbose:$VerbosePreference ` -Debug:$DebugPreference [PSCustomObject] $DependencyMap = Invoke-ResolveDependency ` -InstalledLocation $Path ` -Credential $Credential ` -Repository $Repository ` -SkipImport:$SkipImport ` -Verbose:$VerbosePreference ` -Debug:$DebugPreference Write-Verbose "Re-Import Module Path: $Path" # Note: Following import does NOT work. # Import-Module -Name $Name -RequiredVersion $RequiredVersion -Verbose # Any using of -RequiredVersion skip execution of init.ps1 # This problem we're bpassing via using Import-Module on installed path of module. if ($SkipImport.IsPresent) { Write-Debug "Skip of Import-Module" } else { Wait-OriAzBopModuleComplete ` -Path $Path ` -SleepInSec $SleepInSec ` -MaxRetry $MaxRetry ` -Verbose:$VerbosePreference ` -Debug:$DebugPreference Import-Module $Path ` -Verbose:$VerbosePreference ` -Debug:$DebugPreference ` -Force } Write-Verbose "-- End of Import-OriAzBopPsd --" return $DependencyMap } |