ImportPackage.ps1
<#PSScriptInfo .VERSION 1.0 .GUID ed896e0c-b20d-4d70-b894-ac698a1032cb .AUTHOR Mavaddat Javid .COMPANYNAME Mav Jav Education .COPYRIGHT 2023 .TAGS package NuGet PackageManagement assembly dll .LICENSEURI https://creativecommons.org/licenses/by/4.0/ .PROJECTURI https://gist.github.com/mavaddat/698408014b9fa3a0c1307c5104f5276d .ICONURI https://i.imgur.com/YOxIHjx.png .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES First version; Requires PowerShell Core 6+ for now. .PRIVATEDATA #> #Requires -Module PackageManagement <# .DESCRIPTION A cmdlet to enable easy importing of assemblies (DLL) from installed NuGet packages into the current PowerShell session. #> Param() function Import-Package { [CmdletBinding()] param ( [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Name')] [ValidateScript({ if (Get-Package -Name $_ -ErrorAction SilentlyContinue) { $true } else { throw "Package '$($_)' not found" } })] [ArgumentCompleter({ Get-Package -AllVersions | Select-Object -ExpandProperty Name })] [string]$PackageName, [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Path')] [ValidateNotNullOrEmpty()] [string]$Path ) begin { switch ($PSEdition) { Core { $script:filter = 'netstandard*'; break } Desktop { $script:filter = 'net*'; break } Default { $script:filter = 'net*'; break } } } process { # if using name, get path switch ($PSCmdlet.ParameterSetName) { Name { Get-Package -Name $PackageName | ForEach-Object { Write-Verbose -Message "Importing package '$($_.Name)' $($_.Version) installed from '$($_.ProviderName)'" Add-Type -LiteralPath ( $_.Source | Split-Path | Get-ChildItem -Filter $script:filter -Recurse -Directory | Get-ChildItem -Filter *.dll -Recurse -File | Select-Object -Last 1).FullName -Verbose:$VerbosePreference } break } Path { $__PackageName = Get-Package -Verbose:$VerbosePreference | Select-Object -ExpandProperty Source | Split-Path -Parent | Split-Path -Leaf | Select-String -Pattern '\D+(?=\.[\d\.]+)' -AllMatches | Where-Object { -not [string]::IsNullOrWhiteSpace($_.Matches.Value) -and $Path -match [regex]::Escape($_.Matches.Value) } Import-Package -PackageName $__PackageName.Matches.Value -Verbose:$VerbosePreference break } } } } |