Public/Install-ISComponent.ps1
function ModuleRoot { $MyInvocation.ScriptName | Split-Path -Parent } $PublicCmdlets = Join-Path (ModuleRoot | Split-Path -Parent) "Public" $PrivateCmdlets = Join-Path (ModuleRoot | Split-Path -Parent) "Private" . $PublicCmdlets\Get-ISComponent.ps1 . $PublicCmdlets\Invoke-ISNuGetCommand.ps1 <# .SYNOPSIS Installs a component from nuget based on name .DESCRIPTION The Install-ISComponent cmdlet will install a nuget package by package name. .PARAMETER Name List of package names to install. .PARAMETER InstallDirectory The directory to install the package to. Defaults to the ComponentStore setting. Usually C:\Program Files\IntelliSearch. .PARAMETER PreRelease Flag to allow pre-release packages. .PARAMETER Version Specifies version of package to install. .PARAMETER Source Specifies NuGet source to install from. All enabled sources will be checked if not set. .EXAMPLE C:\PS> Install-ISComponent -Name "IntelliSearch.Server.CrawlerManager" ComponentName ComponentVersion ------------- ---------------- IntelliSearch.Server.CrawlerManager.6.0.0 6.0.0 This will install the latest version of the IntelliSearch.Server.CrawlerManager component. .EXAMPLE C:\PS> Install-ISComponent -Name "IntelliSearch.Server.CrawlerManager" -Version "7.1.9" -Source "IntelliSearch" ComponentName ComponentVersion ------------- ---------------- IntelliSearch.Server.CrawlerManager.7.1.9 7.1.9 This will install the 7.1.9 version of the IntelliSearch.Server.CrawlerManager component from IntelliSearch nuget sources. .EXAMPLE C:\PS> Install-ISComponent -Name "IntelliSearch.Server.CrawlerManager" -PreRelease ComponentName ComponentVersion ------------- ---------------- IntelliSearch.Server.CrawlerManager.6.0.0-Beta.13 6.0.0-Beta.13 This will install the latest pre-release version of the IntelliSearch.Server.CrawlerManager component. .INPUTS System.String .OUTPUTS IntelliSearch.Component.Detail An object representing an IntelliSearch component. #> function Install-ISComponent { [CmdletBinding(ConfirmImpact = 'Medium')] [OutputType()] param( [Parameter( Mandatory = $true, Position = 0, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true )] [ValidateNotNull()] [ValidateNotNullOrEmpty()] [Alias()] [String[]] $Name, [Parameter( Mandatory = $false, Position = 1, ValueFromPipelineByPropertyName = $true )] [ValidateScript( { Test-Path $_ -IsValid -PathType:Container})] [Alias()] [String] $InstallDirectory = $IS_Settings.ComponentStore, [Parameter( Mandatory = $false, Position = 2, ValueFromPipelineByPropertyName = $true )] [ValidateNotNull()] [ValidateNotNullOrEmpty()] [Alias()] [String] $Version, [Parameter( Mandatory = $false, Position = 3, ValueFromPipelineByPropertyName = $true )] [ValidateNotNull()] [ValidateNotNullOrEmpty()] [Alias()] [String] $Source, [Parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $true )] [Alias()] [switch] $PreRelease ) begin { #region Set up NuGet if ($Source) { $NugetSources = Invoke-ISNuGetCommand -Action "sources" -Arguments @{ 'Format' = "Short"; '-NonInteractive' = $null} if ($NugetSources | Select-String -Pattern $Source) { $NuGetArguments = @{ 'enable' = $null 'Name' = $Source '-NonInteractive' = $null } Invoke-ISNuGetCommand -Action "sources" -Arguments $NugetArguments | Out-Null } } #endregion Set up NuGet } process { foreach ($aName in $Name) { $NuGetArguments = @{ $aName = $null '-NonInteractive' = $null 'OutputDirectory' = $InstallDirectory } if ($Prerelease) { $NugetArguments.Add("-PreRelease", $null) } if ($Version) { $NugetArguments.Add("Version", $Version) } if ($Source) { $NugetArguments.Add("Source", $Source) } # Execute the built command Write-Verbose -Message ("Attempting to install {0} with NuGet" -f $aName) $NugetResult = Invoke-ISNuGetCommand -Action "install" -Arguments $NuGetArguments -ErrorAction:Stop foreach ($nugetLine in $NugetResult) { Write-Verbose $nugetLine } switch -regex ($NugetResult) { "(?:Added package ')(?<InstalledName>.*)(?:' to folder)" { Write-Verbose "Package installed" $InstalledName = $Matches.InstalledName } '(?:Package \")(?<InstalledName>.*)(?:\" is already installed.)' { Write-Verbose "Package already installed." $InstalledName = $Matches.InstalledName } Default { Write-Error "NuGet output unknown. Could not find the installed package." -ErrorAction:Stop } } Write-Verbose "Found package name: $($InstalledName)" Get-ISComponent -Name $InstalledName } } end { } } |