--- name: update-ps-sdk description: 'Upgrade the PowerShell SDK version in the Azure Functions PowerShell language worker. Use when: updating PowerShell SDK, upgrading PS version, bumping Microsoft.PowerShell.SDK, updating bundled modules, new PowerShell release.' argument-hint: 'Target PowerShell SDK version (e.g., 7.6.0-preview.5, 7.4.7)' --- # Upgrade PowerShell SDK Version Upgrades the PowerShell language worker to reference a new PowerShell SDK release. ## When to Use - A new PowerShell SDK version is released on [GitHub](https://github.com/PowerShell/PowerShell/releases) - You need to bump the `Microsoft.PowerShell.SDK` package version ## Inputs The user must provide (or you must confirm): - **Target PS SDK version** — e.g., `7.6.0-preview.5`, `7.4.7` - **Release tag** — typically `v`, e.g., `v7.6.0-preview.5` ## Procedure ### 1. Check the .NET SDK Requirement Look up the .NET SDK version required by the target PowerShell SDK. The release notes at `https://github.com/PowerShell/PowerShell/releases/tag/` list the exact .NET SDK version under **Build and Packaging Improvements** (e.g., "Update .NET SDK to 8.0.419"). - Update the `` in both `.csproj` files if the .NET **major** version has changed: - `src/Microsoft.Azure.Functions.PowerShellWorker.csproj` - `test/Unit/Microsoft.Azure.Functions.PowerShellWorker.Test.csproj` - Update `MinimalPatch` and `DefaultPatch` in `tools/helper.psm1` (`$DotnetSDKVersionRequirements`) to match the .NET SDK patch version from the release notes. For example, if the release requires .NET SDK `8.0.419`, set both values to `'419'`. - Keep the CI SDK installers aligned with **every** entry in `$DotnetSDKVersionRequirements`. Update the matching `UseDotNet@2` task version in both templates: - `eng/ci/templates/build.yml` - `eng/ci/templates/test.yml` Each required SDK must use the exact `DefaultPatch` version from `tools/helper.psm1`. Do not remove unrelated SDK requirements such as the .NET 3.1 SDK used by `Microsoft.ManifestTool.dll`. ### 2. Update the PowerShell SDK Package Version Update the `Microsoft.PowerShell.SDK` `` version in **both** project files: - `src/Microsoft.Azure.Functions.PowerShellWorker.csproj` - `test/Unit/Microsoft.Azure.Functions.PowerShellWorker.Test.csproj` ### 3. Update SDK Dependencies Check the PowerShell release notes for any new or updated dependencies required by the SDK. For example, certain releases require a specific `Microsoft.CodeAnalysis.CSharp` version. Update these in both `.csproj` files as needed. ### 4. Remove Temporarily Pinned Transitives Review both `.csproj` files for `` entries that were pinned to work around transitive dependency issues (e.g., a vulnerable transitive that was pinned until the parent package updated it). If the new PowerShell SDK now pulls in a sufficiently new version of that transitive, **remove the explicit pin** rather than bumping it. Only keep explicit pins that are still necessary. ### 5. Update Bundled Module Versions Update module versions in `src/requirements.psd1` to match the versions shipped with the target release. The authoritative source for bundled module versions is: ``` https://github.com/PowerShell/PowerShell/blob//src/Modules/PSGalleryModules.csproj ``` Replace `` with the actual tag (e.g., `v7.6.0-preview.5`). The modules to check are listed in `src/requirements.psd1` (e.g., `Microsoft.PowerShell.Archive`, `ThreadJob`, `PowerShellGet`, `PackageManagement`). ### 6. Build and Test Before building, verify that the exact .NET SDK versions derived from every `DefaultPatch` in `tools/helper.psm1` appear in both CI templates. Treat any missing or different `UseDotNet@2` version as drift and fix it before continuing. Run a clean build with tests: ``` pwsh -c "./build.ps1 -Clean -Test" ``` **Address all build warnings.** Common warnings to fix: - `NU1605` (package downgrade) — update the pinned version or remove the pin if the SDK now provides a newer transitive. - `NU1510` (unnecessary pinned package) — remove the `` since the package is no longer needed as a direct dependency. - `CS8632` and other code warnings — fix the underlying code issue. Re-run the build until it completes with **zero warnings and all tests passing**. ### 7. Check for Vulnerable Packages Run the vulnerability checker against the solution: ``` pwsh -c "./Check-CsprojVulnerabilities.ps1 -PrintReport" ``` If vulnerabilities are found, update or pin the affected packages to non-vulnerable versions, then re-run steps 6 and 7. ### 8. Submit PR Submit a pull request to the `dev` branch. The `dev` branch always tracks the latest PowerShell version.