Public/Install-SolrService.ps1
function Install-SolrService { [CmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory, ValueFromPipeline)] [string]$Path, [Parameter(Mandatory)] [string]$NssmPath, [string]$Name = "solr662", [ValidateRange(0, 65535)] [int]$Port = 8983, [string]$ServiceDisplayName = "Solr 6.6.2", [string]$ServiceDescription = "Service for Solr 6.6.2", [string]$Uri = "https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip", [switch]$SkipNssmInstall ) $activity = "Installing Solr Service..." if (-not $SkipNssmInstall) { Write-Progress -Activity $activity -Status "Downloading Nssm package..." if ($PSCmdlet.ShouldProcess($Uri, "Downloading package")) { $tmp = [IO.Path]::GetTempFileName() | Rename-Item -NewName { $_ -replace 'tmp$', 'zip' } -PassThru Invoke-WebRequest -Uri $Uri -OutFile $tmp.FullName } Write-Progress -Activity $activity -Status "Extracting Nssm package to $NssmPath..." if ($PSCmdlet.ShouldProcess($tmp.FullName, "Extract package")) { Expand-Archive $tmp.FullName -DestinationPath $NssmPath -Force } } Write-Progress -Activity $activity -Status "Installing Solr service ($Name) to Solr instance at $Path..." Write-Verbose "Creating NSSM service to $Path..." if ($PSCmdlet.ShouldProcess($Name, "Install service")) { $NssmExePath = Get-ChildItem -Path $NssmPath -Filter nssm.exe -Recurse -ErrorAction SilentlyContinue -Force | Select-Object -First 1 if ($NssmExePath) { Write-Verbose "nssm.exe found at $NssmExePath.FullName" if (-not (Get-Service $Name)) { & $NssmExePath.FullName install $Name $Path\bin\solr.cmd start -f -p $Port & $NssmExePath.FullName set $Name DisplayName $ServiceDisplayName & $NssmExePath.FullName set $Name Description $ServiceDescription } else { & $NssmExePath.FullName set $Name ImagePath $Path\bin\solr.cmd start -f -p $Port & $NssmExePath.FullName set $Name DisplayName $ServiceDisplayName & $NssmExePath.FullName set $Name Description $ServiceDescription } } } Write-Progress -Activity $activity -Status "Starting Solr service ($Name)..." if ($PSCmdlet.ShouldProcess($Name, "Start service")) { Set-Service $Name -Status Running } } |