1+ <# 
2+ . SYNOPSIS 
3+     Verifies that Microsoft NuGet packages have proper metadata. 
4+ . DESCRIPTION 
5+     Downloads a verification tool and runs metadata validation on the provided NuGet packages. This script writes an 
6+     error if any of the provided packages fail validation. All arguments provided to this PowerShell script that do not 
7+     match PowerShell parameters are passed on to the verification tool downloaded during the execution of this script. 
8+ . PARAMETER  NuGetExePath 
9+     The path to the nuget.exe binary to use. If not provided, nuget.exe will be downloaded into the -DownloadPath 
10+     directory. 
11+ . PARAMETER  PackageSource 
12+     The package source to use to download the verification tool. If not provided, nuget.org will be used. 
13+ . PARAMETER  DownloadPath 
14+     The directory path to download the verification tool and nuget.exe to. If not provided, 
15+     %TEMP%\NuGet.VerifyNuGetPackage will be used. 
16+ . PARAMETER  args 
17+     Arguments that will be passed to the verification tool. 
18+ . EXAMPLE 
19+     PS> .\verify.ps1 *.nupkg 
20+     Verifies the metadata of all .nupkg files in the currect working directory. 
21+ . EXAMPLE 
22+     PS> .\verify.ps1 --help 
23+     Displays the help text of the downloaded verifiction tool. 
24+ . LINK 
25+     https://github.com/NuGet/NuGetGallery/blob/master/src/VerifyMicrosoftPackage/README.md 
26+ #> 
27+ 
28+ #  This script was copied from https://github.com/NuGet/NuGetGallery/blob/3e25ad135146676bcab0050a516939d9958bfa5d/src/VerifyMicrosoftPackage/verify.ps1
29+ 
30+ [CmdletBinding (PositionalBinding  =  $false )]
31+ param (
32+    [string ]$NuGetExePath , 
33+    [string ]$PackageSource  =  " https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" , 
34+    [string ]$DownloadPath , 
35+    [Parameter (ValueFromRemainingArguments  =  $true )]
36+    [string []]$args 
37+ )
38+ 
39+ #  The URL to download nuget.exe.
40+ $nugetExeUrl  =  " https://dist.nuget.org/win-x86-commandline/v4.9.4/nuget.exe" 
41+ 
42+ #  The package ID of the verification tool.
43+ $packageId  =  " NuGet.VerifyMicrosoftPackage" 
44+ 
45+ #  The location that nuget.exe and the verification tool will be downloaded to.
46+ if  (! $DownloadPath ) {
47+     $DownloadPath  =  (Join-Path  $env: TEMP  " NuGet.VerifyMicrosoftPackage" 
48+ }
49+ 
50+ $fence  =  New-Object  - TypeName string - ArgumentList ' =' ,  80 
51+ 
52+ #  Create the download directory, if it doesn't already exist.
53+ if  (! (Test-Path  $DownloadPath )) {
54+     New-Item  - ItemType Directory $DownloadPath  |  Out-Null 
55+ }
56+ Write-Host  " Using download path: $DownloadPath " 
57+ 
58+ if  ($NuGetExePath ) {
59+     $nuget  =  $NuGetExePath 
60+ } else  {
61+     $downloadedNuGetExe  =  Join-Path  $DownloadPath  " nuget.exe" 
62+     
63+     #  Download nuget.exe, if it doesn't already exist.
64+     if  (! (Test-Path  $downloadedNuGetExe )) {
65+         Write-Host  " Downloading nuget.exe from $nugetExeUrl ..." 
66+         $ProgressPreference  =  ' SilentlyContinue' 
67+         try  {
68+             Invoke-WebRequest  $nugetExeUrl  - OutFile $downloadedNuGetExe 
69+             $ProgressPreference  =  ' Continue' 
70+         } catch  {
71+             $ProgressPreference  =  ' Continue' 
72+             Write-Error  $_ 
73+             Write-Error  " nuget.exe failed to download." 
74+             exit 
75+         }
76+     }
77+ 
78+     $nuget  =  $downloadedNuGetExe 
79+ }
80+ 
81+ Write-Host  " Using nuget.exe path: $nuget " 
82+ Write-Host  "  " 
83+ 
84+ #  Download the latest version of the verification tool.
85+ Write-Host  " Downloading the latest version of $packageId  from $packageSource ..." 
86+ Write-Host  $fence 
87+ &  $nuget  install $packageId  ` 
88+     - Prerelease ` 
89+     - OutputDirectory $DownloadPath  ` 
90+     - Source $PackageSource 
91+ Write-Host  $fence 
92+ Write-Host  "  " 
93+ 
94+ if  ($LASTEXITCODE  -ne  0 ) {
95+     Write-Error  " nuget.exe failed to fetch the verify tool." 
96+     exit 
97+ }
98+ 
99+ #  Find the most recently downloaded tool
100+ Write-Host  " Finding the most recently downloaded verification tool." 
101+ $verifyProbePath  =  Join-Path  $DownloadPath  " $packageId .*" 
102+ $verifyPath  =  Get-ChildItem  - Path $verifyProbePath  - Directory ` 
103+     |  Sort-Object  - Property LastWriteTime - Descending ` 
104+     |  Select-Object  - First 1 
105+ $verify  =  Join-Path  $verifyPath  " tools\NuGet.VerifyMicrosoftPackage.exe" 
106+ Write-Host  " Using verification tool: $verify " 
107+ Write-Host  "  " 
108+ 
109+ #  Execute the verification tool.
110+ Write-Host  " Executing the verify tool..." 
111+ Write-Host  $fence 
112+ &  $verify  $args 
113+ Write-Host  $fence 
114+ Write-Host  "  " 
115+ 
116+ #  Respond to the exit code.
117+ if  ($LASTEXITCODE  -ne  0 ) {
118+     Write-Error  " The verify tool found some problems." 
119+ } else  {
120+     Write-Output  " The verify tool succeeded." 
121+ }
0 commit comments