From 548e40eaa5bb24aa2fade6cbf61e16329e76bd36 Mon Sep 17 00:00:00 2001 From: Stephen Valdinger Date: Sat, 27 Apr 2019 22:01:34 -0400 Subject: [PATCH] Optionally collect additonal metadata from the nuspec. --- functions/Get-ChocoPackageMetaData.ps1 | 32 ++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/functions/Get-ChocoPackageMetaData.ps1 b/functions/Get-ChocoPackageMetaData.ps1 index 3ea00a0..0cea724 100644 --- a/functions/Get-ChocoPackageMetaData.ps1 +++ b/functions/Get-ChocoPackageMetaData.ps1 @@ -9,25 +9,40 @@ Function Get-ChocoPackageMetaData { .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 + + Dependencies work a little funny in how they get stuffed into the object. They come back as an object themselves, so special care must be taken to unroll them. + + e.g. + Get-ChocoPackageMetaData -ChocolateyPackage C:\packages\googlechrome.nupkg -AdditionalInformation Dependencies | Select-Object -ExpandProperty Dependencies #> [cmdletBinding()] Param( [ValidateScript({Test-Path $_})] [String[]] - $ChocolateyPackage + $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 = @{} + $obj = [ordered]@{} $entry = [IO.Compression.Zipfile]::OpenRead($package).Entries | Where-Object { $_.Name -match "nuspec" } $stream = $entry.Open() @@ -36,6 +51,19 @@ Function Get-ChocoPackageMetaData { [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)) + } + + else{ + $obj.Add("$member",$($xml.package.metadata.$($member))) + } + + } + $reader.Close() $stream.Close() [pscustomobject]$obj