publish.ps1
<# .SYNOPSIS Publish the Module to PSGallery .DESCRIPTION This script will publish the module to the PSGallery .NOTES You will need to create a NuGet API Key for the PSGallery at https://www.powershellgallery.com/account/apikeys .LINK https://raw.githubusercontent.com/rulasg/DemoPsModule/main/publish.ps1 .EXAMPLE # Publish the module to the PSGallery without prompting > Publish.ps1 -Force -NuGetApiKey "<API Key>"" .EXAMPLE # Publish the module to the PSGallery using PAT on enviroment variable > $env:NUGETAPIKEY = <API Key> > ./publish.ps1 #> [CmdletBinding( SupportsShouldProcess, ConfirmImpact='High' )] param( # The NuGet API Key for the PSGallery [Parameter(Mandatory=$false)] [string]$NuGetApiKey, # Force the publish without prompting for confirmation [Parameter(Mandatory=$false)] [switch]$Force, # Force publishing package to the gallery. Equivalente to Import-Module -Force [Parameter(Mandatory=$false)] [switch]$ForcePublish ) # check that $NuggetApiKey is null or whitespace # If it is use environment variable $env:NugetApiKey if ( [string]::IsNullOrWhiteSpace($NuGetApiKey) ) { if ( [string]::IsNullOrWhiteSpace($env:NUGETAPIKEY) ) { Write-Error -Message '$Env:NUGETAPIKEY is not set. Try running `$Env:NUGETAPIKEY = (Find-DocsFile nugetapikey | rsk | Get-SecretData).Get()`' return } $NuGetApiKey = $env:NUGETAPIKEY } # look for psd1 file on the same folder as this script $psdPath = Get-ChildItem -Path $PSScriptRoot -Filter *.psd1 # check if $psd is set if ( $null -eq $psdPath ) { Write-Error -Message 'No psd1 file found' return } # check if $psd is a single file if ( $psdPath.Count -gt 1 ) { Write-Error -Message 'More than one psd1 file found' return } # Display Module Information $psd1 = Import-PowerShellDataFile -Path $psdPath $psd1 $psd1.PrivateData.PSData # Confirm if not forced if ($Force -and -not $Confirm){ $ConfirmPreference = 'None' } # Publish the module with ShouldProcess (-whatif, -confirm) if ($PSCmdlet.ShouldProcess($psdPath, "Publish-Module")) { $message ="Publishing {0} {1} {2} to PSGallery ..." -f $($psdPath.Name), $($psd1.ModuleVersion), $($psd1.PrivateData.pSData.Prerelease) # show an empty line Write-Information -InformationAction Continue -Message "" Write-Information -InformationAction Continue -Message $message Publish-Module -Name $psdPath -NuGetApiKey $NuGetApiKey -Force:$ForcePublish } |