Files
Chocolatey-tools/functions/Get-ChocoPackageMetaData.ps1
2019-04-28 16:48:56 -04:00

69 lines
2.1 KiB
PowerShell

Function Get-ChocoPackageMetaData {
<#
.SYNOPSIS
Return package metadata from a given Chocolatey Package(s)
.DESCRIPTION
Reads the contents of the nupkg and extracts metadata from the nuspec contained within it
.PARAMETER ChocolateyPackage
The chocolatey package(s) you wish to extract data from
.PARAMETER AdditonalInformation
Return more information about the package than the default ID and Version
.EXAMPLE
Get-ChocoPackageMetaData -ChocolateyPackage C:\Packages\googlechrome.nupkg
.EXAMPLE
Get-ChocoPackageMetaData -ChocolateyPackage C:\Packages\googlechrome.nupkg -AdditionalInformation Owners,Description,ProjectUrl,Dependencies
.NOTES
Written by Stephen Valdinger of Chocolatey Software for Dan Franciscus
#>
[cmdletBinding()]
Param(
[ValidateScript({Test-Path $_})]
[String[]]
$ChocolateyPackage,
[Parameter()]
[String[]]
[ValidateSet('Authors','Description','ProjectUrl','Owners','Licenseurl','Iconurl','Dependencies')]
$AdditionalInformation
)
begin { $null = Add-Type -Assemblyname "System.IO.Compression.Filesystem" }
process {
Foreach($package in $ChocolateyPackage){
$obj = [ordered]@{}
$entry = [IO.Compression.Zipfile]::OpenRead($package).Entries |
Where-Object { $_.Name -match "nuspec" }
$stream = $entry.Open()
$reader = New-Object IO.StreamReader($stream)
$text = $reader.ReadToEnd()
[xml]$xml = $text
$obj.Add("Name","$($xml.package.metadata.id)")
$obj.Add("Version","$($xml.package.metadata.version)")
Foreach($member in $AdditionalInformation){
if($member -eq 'Dependencies'){
$obj.Add("$member",$($xml.package.metadata.dependencies.dependency | Select-Object Id,Version))
}
else{
$obj.Add("$member",$($xml.package.metadata.$($member)))
}
}
$reader.Close()
$stream.Close()
[pscustomobject]$obj
}
}
}