Public/Register-OriAzBopRepository.ps1

<#
.DESCRIPTION
This function Register repository
 
.SYNOPSIS
This function Register repository
     
.PARAMETER DevOpsAccount
The name of the dev ops account. Default value is 'oriflame'
       
.PARAMETER RepositoryCredential
Credentials for connection to repository
 
.PARAMETER PsProjectName
String array of project name in Dev Ops for connect via PowershellGet for getting Powershell modules e.g. PackageManagementFeed
 
.PARAMETER NugetProjectName
String array of project name in Dev Ops for connect via Nuget for getting Powershell modules e.g. Online, GlobalDev, DeploymentPackages
 
 
.PARAMETER SkipPrompt
When is set it does not prompt
 
 
.EXAMPLE
$password = ConvertTo-SecureString 'heslo1' -AsPlainText -Force
$RepositoryCredential = New-Object System.Management.Automation.PSCredential 'Wuhan@oriflame.com',$password
 
$password = ConvertTo-SecureString 'heslo2' -AsPlainText -Force
$RemoteCredential = New-Object System.Management.Automation.PSCredential 'IFSORILOCAL\login',$password
 
Register-OriAzBopRepository `
-DevOpsAccount 'oriflame' `
-RepositoryCredential $RepositoryCredential `
-PsProjectName @('PackageManagementFeed') `
-NugetProjectName @('DeploymentPackages')
#>


function Register-OriAzBopRepository {
    
  [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")]
  param
  (   
      
    [parameter(Mandatory = $false, HelpMessage = 'The name of the dev ops account')]
    [string] $DevOpsAccount = $Script:VstsAccount,
      
    [parameter(Mandatory = $true, HelpMessage = 'Credentials for connection to repository')]
    [PSCredential] $RepositoryCredential,

    [parameter(Mandatory = $true, HelpMessage = 'String array of project name in Dev Ops for connect via PowershellGet for getting Powershell modules e.g. PackageManagementFeed')]
    [string[]] $PsProjectName,

    [parameter(Mandatory = $true, HelpMessage = 'String array of project name in Dev Ops for connect via Nuget for getting Powershell modules e.g. Online, GlobalDev, DeploymentPackages')]
    [string[]] $NugetProjectName,

    [parameter(Mandatory = $false, HelpMessage = 'When is set it does not prompt')]
    [Switch] $SkipPrompt

  )
  
  #in case of any error we want to stop execution, in stderr having the error. Use try-catch to handle errors if needed.
  $ErrorActionPreference = "Stop";
  Write-Verbose "-- Register-OriAzBopRepository --"
  Write-Verbose "MachineName: $MachineName"
  Write-Verbose "RemoteCredential: $(ConvertTo-Json $RemoteCredential)"
  Write-Verbose "DevOpsAccount: $DevOpsAccount"
  Write-Verbose "PsProjectName: $(ConvertTo-Json $PsProjectName)"
  Write-Verbose "NugetProjectName: $(ConvertTo-Json $NugetProjectName)"
  Write-Verbose "-- Invoke-Commnad on machine [$($env:COMPUTERNAME)]"
      

  $registeredPsFeeds = Get-PSRepository
  foreach ($feed in $PsProjectName) {

    
    $uri = 'https://{0}.pkgs.visualstudio.com/_packaging/{1}/nuget/v2' -f $DevOpsAccount, $feed
    # Note: alternative new URI
    # $uri = 'https://pkgs.dev.azure.com/{0}/_packaging/{1}/nuget/v2' -f $DevOpsAccount, $feed
  
    $RepoAlreadyExists = $false
    foreach ($OneExistsingFeed in $registeredPsFeeds) {
      if ($OneExistsingFeed.SourceLocation -ilike $uri) {
        Write-Verbose "Already registered repo [$OneExistsingFeed] NuGet feed based on URI compare."
        $RepoAlreadyExists = $true
        continue
      }
      if ($OneExistsingFeed.Name -ilike $feed) {
        Write-Verbose "Already registered repo [$OneExistsingFeed] NuGet feed based on repo name compare."
        $RepoAlreadyExists = $true
        continue
      }
    }
    if ($RepoAlreadyExists) {
      Write-Verbose "Skip to another required PsProjectName"
      continue
    }
    else {
      Write-Verbose "Register [$feed] PowershellGet feed."
    }
  
    $RegisterParam = @{
      Name               = $feed
      SourceLocation     = $uri
      PublishLocation    = $uri
      InstallationPolicy = 'Trusted'
      Credential         = $RepositoryCredential
    }
            
  
    Write-Verbose "Register-PSRepository params:"
    Write-Verbose (ConvertTo-Json  $RegisterParam)
    # @RegisterParam
    #Register-PSRepository `
    # @RegisterParam `
    # -Verbose:$VerbosePreference `
    # -Debug:$DebugPreference
    if ($PSCmdlet.ShouldProcess("Register Powsershell reposiory(PS)", $MachineName)) {
      Register-OriAzBopInternalPSRepository `
      -RegisterRepositoryParams $RegisterParam `
      -Verbose:$VerbosePreference `
      -Debug:$DebugPreference 
    }
            
  }

  Write-Verbose 'Begin register nuget part'
  $registeredNugetFeeds = Get-OriAzBopInternalPackageSource

  foreach ($feed in $NugetProjectName) {
    Write-Verbose "try nuget feed [$feed]"
    $uri = 'https://pkgs.dev.azure.com/{0}/_packaging/{1}/nuget/v2' -f $DevOpsAccount, $feed
    #Note: alternate old URI
    # $uri = 'https://{0}.pkgs.visualstudio.com/_packaging/{1}/nuget/v2' -f $DevOpsAccount, $feed
  
    $RepoAlreadyExists = $false
    foreach ($OneExistsingFeed in $registeredNugetFeeds) {
      Write-Verbose "Compare URI [$($OneExistsingFeed.Location)] and [$uri]"
      if ($OneExistsingFeed.Location -ilike $uri) {
        Write-Verbose "Already registered repo [$feed] NuGet feed based on URI compare."
        $RepoAlreadyExists = $true
        continue
      }
      Write-Verbose "Compare name [$($OneExistsingFeed.Name)] and [$feed]"
      if ($OneExistsingFeed.Name -ilike $feed) {
        Write-Verbose "Already registered repo [$feed] NuGet feed based on repo name compare."
        $RepoAlreadyExists = $true
        continue
      }
    }

    Write-Verbose "End of compare [$feed]"
    if ($RepoAlreadyExists) {
      Write-Verbose "Skip to another required NugetProjectName"
      continue
    }
    else {
      Write-Verbose "Register [$feed] NuGet feed."
    }
  
            
    #Note: alternative old URI "https://oriflame.pkgs.visualstudio.com/_packaging/$feed/nuget/v2"
  
    $RegisterParam = @{
      Name         = $feed
      Location     = $uri
      Trusted      = $true
      Credential   = $RepositoryCredential
      ProviderName = 'NuGet'
    }
            
  
    Write-Verbose "Register-PackageSource params:"
    Write-Verbose (ConvertTo-Json  $RegisterParam)
    # @RegisterParam
    #Register-PackageSource `
    # @RegisterParam `
    # -Verbose:$VerbosePreference `
    # -Debug:$DebugPreference
    if ($SkipPrompt -or $PSCmdlet.ShouldProcess("Register Package Source reposiory(GIT)", $MachineName)) {
      Register-OriAzBopInternalPackageSource `
      -RegisterPackageSourceParam $RegisterParam `
      -Verbose:$VerbosePreference `
      -Debug:$DebugPreference 
    }

  }
  Write-Verbose "Result of registred repo:"
  if($VerbosePreference) {
    Get-OriAzBopInternalPackageSource
  }
  

  Write-Verbose "-- End of Invoke-Commnad on machine [$($env:COMPUTERNAME)]"
  Write-Verbose "-- End of Register-OriAzBopRepository --"
}