Last active
April 1, 2020 11:26
-
-
Save georgechang/0e092d9572d814c02598d0533ecbc4b6 to your computer and use it in GitHub Desktop.
Install a Sitecore Host plugin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
.SYNOPSIS | |
Installs a Sitecore Host plugin NuGet package to a Sitecore Host instance. | |
.DESCRIPTION | |
Sitecore Host plugins are distributed via NuGet packages and have specific requirements to where assets are deployed. This will extract the files and place them in the correct directories depending on whether this is an application plugin or a runtime plugin. | |
.PARAMETER Path | |
Specifies the path to the NuGet package (.nupkg) file. | |
.PARAMETER Path | |
Specifies the path to the root of the Sitecore Host application. | |
.PARAMETER Runtime | |
Set this flag to install the Sitecore Host plugin as a runtime plugin in the sitecoreruntime folder. | |
.PARAMETER Environment | |
For runtime plugins only. Specifies the environment for the plugin to be deployed to. Default value is "production". | |
.INPUTS | |
None. You cannot pipe objects to Install-ScHostPackage. | |
.OUTPUTS | |
None. Files are extracted to their target location and the script produces no output. | |
.EXAMPLE | |
C:\PS> Install-ScHostPackage -Path C:\packages\Sitecore.Host.Plugin.1.0.0.nupkg -HostPath C:\inetpub\wwwroot\schost | |
.EXAMPLE | |
C:\PS> Install-ScHostPackage -Path C:\packages\Sitecore.Host.Plugin.1.0.0.nupkg -HostPath C:\inetpub\wwwroot\schost -Runtime | |
.EXAMPLE | |
C:\PS> Install-ScHostPackage -Path C:\packages\Sitecore.Host.Plugin.1.0.0.nupkg -HostPath C:\inetpub\wwwroot\schost -Runtime -Environment "development" | |
.LINK | |
https://github.com/georgechang/mashups | |
#> | |
function Install-ScHostPackage { | |
[CmdletBinding(DefaultParameterSetName = "default")] | |
param( | |
[Parameter(ParameterSetName = "default", Mandatory = $true, Position = 0)] | |
[Parameter(ParameterSetName = "runtime", Mandatory = $true, Position = 0)] | |
[string]$Path, | |
[Parameter(ParameterSetName = "default", Mandatory = $true)] | |
[Parameter(ParameterSetName = "runtime", Mandatory = $true)] | |
[string]$HostPath, | |
[Parameter(ParameterSetName = "runtime", Mandatory = $true)] | |
[switch]$Runtime, | |
[Parameter(ParameterSetName = "runtime")] | |
[string]$Environment = "production" | |
) | |
Add-Type -AssemblyName System.IO.Compression.FileSystem | |
$zip = [System.IO.Compression.ZipFile]::OpenRead($Path) | |
$nuspec = $zip.Entries | Where-Object { [IO.Path]::GetExtension($_.FullName) -eq ".nuspec" } | Select-Object Name -First 1 | |
$name = [System.IO.Path]::GetFileNameWithoutExtension($nuspec.Name) | |
$targetLibPath = if ($Runtime) { Join-Path $HostPath "sitecoreruntime/$Environment" } else { $HostPath } | |
$targetSitecorePath = Join-Path $targetLibPath -ChildPath "sitecore/$name" | |
# Create missing folders | |
if (-not (Test-Path $targetLibPath)) { | |
New-Item -Path $targetLibPath -ItemType Directory -Force | Out-Null | |
} | |
if (-not (Test-Path $targetSitecorePath)) { | |
New-Item -Path $targetSitecorePath -ItemType Directory -Force | Out-Null | |
} | |
# Extract files to proper targets | |
foreach ($entry in $zip.Entries) { | |
if ($entry.FullName.StartsWith("lib/")) { | |
$destination = "$targetLibPath\$($entry.Name)" | |
} | |
if ($entry.FullName.StartsWith("sitecore/")) { | |
$filePath = $entry.FullName -replace "sitecore/", "" | |
New-Item -Path (Split-Path $targetSitecorePath\$filePath) -ItemType Directory -Force | Out-Null | |
$destination = "$targetSitecorePath\$filePath" | |
} | |
if ($destination) { | |
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destination, $true) | |
} | |
$destination = $null | |
} | |
$zip.Dispose() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment