Public/Publish-PSModule.ps1
<#
.SYNOPSIS .DESCRIPTION Long description .PARAMETER RepositoryName Parameter description .PARAMETER RepositoryPath Parameter description .PARAMETER ApiKey Parameter description .PARAMETER ModuleName Parameter description .PARAMETER ModulePath Parameter description .PARAMETER BuildNumber Parameter description .EXAMPLE An example .NOTES General notes #> function Publish-PSModule { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string] $RepositoryName, [Parameter(Mandatory = $false)] [string] $RepositoryPath, [Parameter(Mandatory = $false)] $ApiKey, [Parameter(Mandatory = $true)] [string] $ModuleName, [Parameter(Mandatory = $true)] [string] $ModulePath, [Parameter(Mandatory = $true)] [int] $BuildNumber ) process { # Default Official PSGallery. $psGalleryName = 'PSGallery' # Test if the repository is registered. Write-Verbose ("Checking if Repository: {0} is registered." -f $RepositoryName) if (!(Get-PSRepository -Name $RepositoryName -ErrorAction SilentlyContinue)) { # Check if the Network Path exists. if(!(Test-Path $RepositoryPath)) { throw "The path does not exist. Please connect to the share." } else { # Register the Repository. if ($RepositoryName -ne $psGalleryName) { Write-Verbose("Registering Repository: {0}." -f $RepositoryName) $registerParams = @{ Name = $RepositoryName SourceLocation = $RepositoryPath PublishLocation = $RepositoryPath InstallationPolicy = "Trusted" } Register-PSRepository @registerParams } } } # Update existing manifest. Write-Verbose("Checking if Module: {0} is registered." -f $ModuleName) if (Find-Module -Repository $RepositoryName -Name $ModuleName -ErrorAction SilentlyContinue) { Write-Verbose ("Updating Manifest for: {0}." -f $ModuleName) $version = (Get-Module -FullyQualifiedName $ModulePath -ListAvailable).Version | Select-Object Major, Minor $newVersion = New-Object Version -ArgumentList $version.major, $version.minor, $BuildNumber Update-ModuleManifest -Path $ModulePath -ModuleVersion $newVersion } # Publish Module. Write-Verbose ("Publishing Module: {0}." -f $ModuleName) $publishParams = @{ Path = ".\$ModuleName" } # Determine type of publish. if ($RepositoryName -eq $psGalleryName) { if ([string]::IsNullOrEmpty($ApiKey)) { throw("Please pass on a NuGet API key to deploy to the PSGallery.") } else { $publishParams.NuGetApiKey = $ApiKey } } else { $publishParams.Repository = $RepositoryName } try { Publish-Module @publishParams } catch [System.Exception] { throw($_.Exception) } } } |