#Requires -Version 5.1 <# .SYNOPSIS Updates the Windows WDK and SDK NuGet package version referenced by Directory.Build.props and packages.config. .DESCRIPTION Rewrites the WDK/SDK NuGet version in both repo-root files so the whole sample tree can be moved to a new WDK/SDK build with a single command. Only packages whose id starts with 'Microsoft.Windows.WDK' or 'Microsoft.Windows.SDK' are touched. Any other package reference (for example Microsoft.Windows.ImplementationLibrary) is left untouched. The files' existing encoding (BOM / no BOM) and line endings are preserved. .EXAMPLE .\UpdateNuGet --package 10.0.28000.2525 .EXAMPLE .\UpdateNuGet --package 10.0.28000.2525-preview .EXAMPLE .\UpdateNuGet --package 10.0.28000.2525 --whatif #> Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' function Show-Usage { @' Usage: .\UpdateNuGet --package [--whatif] --package, -p New WDK/SDK NuGet version. Examples: 10.0.28000.2525 10.0.28000.2525-preview --whatif Show what would change without writing any file. --help, -h Show this help. '@ | Write-Host } # --- parse arguments --------------------------------------------------------- $NewVersion = $null $WhatIf = $false for ($i = 0; $i -lt $args.Count; $i++) { $a = [string]$args[$i] if ($a -match '^(?:--package|-package|-p)=(.+)$') { $NewVersion = $Matches[1] } elseif ($a -match '^(?:--package|-package|-p)$') { $i++ if ($i -lt $args.Count) { $NewVersion = [string]$args[$i] } else { throw "Missing value after '$a'." } } elseif ($a -match '^(?:--whatif|-whatif|-WhatIf)$') { $WhatIf = $true } elseif ($a -match '^(?:--help|-help|-h|-\?|/\?)$') { Show-Usage return } elseif ($a -notmatch '^-' -and -not $NewVersion) { $NewVersion = $a } else { Show-Usage throw "Unknown or unexpected argument: '$a'." } } if (-not $NewVersion) { Show-Usage throw "No version supplied. Pass --package ." } # Allow a leading 'v' (v10.0.28000.2525) for convenience. $NewVersion = $NewVersion.TrimStart('v', 'V') if ($NewVersion -notmatch '^\d+\.\d+\.\d+\.\d+(?:-[0-9A-Za-z.\-]+)?$') { throw "Version '$NewVersion' does not look like a NuGet version " + "(expected e.g. 10.0.28000.2525 or 10.0.28000.2525-preview)." } # --- files to update --------------------------------------------------------- $root = if ($PSScriptRoot) { $PSScriptRoot } else { (Get-Location).Path } $targets = @( [pscustomobject]@{ Path = Join-Path $root 'Directory.Build.props' # packages\Microsoft.Windows.WDK.x64.\build\native\... Pattern = [regex]'(Microsoft\.Windows\.(?:WDK|SDK)(?:\.CPP)?(?:\.(?:x64|x86|arm64|arm))?\.)(\d[0-9A-Za-z.\-]*?)(\\build\\native\\)' }, [pscustomobject]@{ Path = Join-Path $root 'packages.config' # Pattern = [regex]'( {2} ({3} reference(s))" -f $name, ($oldVersions -join ', '), $NewVersion, $found.Count) if (-not $WhatIf) { $enc = New-Object System.Text.UTF8Encoding($hasBom) [System.IO.File]::WriteAllText($t.Path, $newText, $enc) } $anyChange = $true } Write-Host "" if ($WhatIf) { Write-Host "WhatIf: no files were modified." -ForegroundColor Yellow } elseif ($anyChange) { Write-Host "Done. WDK/SDK packages set to $NewVersion." -ForegroundColor Green Write-Host "Next: restore packages (e.g. 'nuget restore' or 'msbuild -t:restore')." } else { Write-Host "No changes were necessary." -ForegroundColor Green }