From 49467d3792a143b14f52d664e3c7ced8653e0933 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Wed, 1 May 2024 15:40:20 +0200 Subject: [PATCH] update default SqlPackage version This updates the default version of SqlPackage that d365fo.tools installs to 162.2.111.2 (the first .NET 8 version). In addition, it replaces the -SkipExtractFromPage parameter and the corresponding web scraping logic with the -Latest parameter and the evergreen link https://aka.ms/sqlpackage-windows Note that unlike the behavior from when the web scraping logic was still working, the latest version of SqlPackage is NOT installed by default. Instead, the fixed version 162.2.111.2 is installed (which may be updated to later versions in the future). Reasons for this change in behavior are discussed in #747. fixes #747 --- .../invoke-d365installsqlpackage.ps1 | 71 +++++++++---------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/d365fo.tools/functions/invoke-d365installsqlpackage.ps1 b/d365fo.tools/functions/invoke-d365installsqlpackage.ps1 index fb4dac4a..d2d07eb2 100644 --- a/d365fo.tools/functions/invoke-d365installsqlpackage.ps1 +++ b/d365fo.tools/functions/invoke-d365installsqlpackage.ps1 @@ -4,84 +4,75 @@ Download SqlPackage.exe to your machine .DESCRIPTION - Download and extract the DotNet/.NET core x64 edition of the SqlPackage.exe to your machine - - It parses the raw html page and tries to extract the latest download link. - As of 12th April 2022, no .NET Core link is available on the download page. The cmdlet will always use the Url parameter. + Download and extract SqlPackage.exe to your machine. .PARAMETER Path Path to where you want the SqlPackage to be extracted to Default value is: "C:\temp\d365fo.tools\SqlPackage\SqlPackage.exe" - .PARAMETER SkipExtractFromPage - Instruct the cmdlet to skip trying to parse the download page and to rely on the Url parameter only + .PARAMETER Latest + Overrides the Url parameter and uses the latest download URL provided by the evergreen link https://aka.ms/sqlpackage-windows .PARAMETER Url - Url/Uri to where the latest SqlPackage download is located + Url/Uri to where the SqlPackage download is located - The default value is for v19.1 (16.0.6161.0) as of writing. This is the last version of SqlPackage based on .NET Core. - According to the Microsoft documentation, a .NET Core version of SqlPackage should be used. - https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/database/import-database - Further discussion can be found here: https://github.com/d365collaborative/d365fo.tools/issues/708 + The default value is for version 162.2.111.2 as of writing. + + Further discussion can be found here: https://github.com/d365collaborative/d365fo.tools/discussions/816 .EXAMPLE PS C:\> Invoke-D365InstallSqlPackage - This will download and extract the latest SqlPackage.exe. + This will download and extract SqlPackage.exe. It will use the default value for the Path parameter, for where to save the SqlPackage.exe. - It will try to extract the latest download URL from the RAW html page. It will update the path for the SqlPackage.exe in configuration. .EXAMPLE PS C:\> Invoke-D365InstallSqlPackage -Path "C:\temp\SqlPackage" - This will download and extract the latest SqlPackage.exe. - It will try to extract the latest download URL from the RAW html page. + This will download and extract SqlPackage.exe. + It will save the SqlPackage.exe to "C:\temp\SqlPackage". It will update the path for the SqlPackage.exe in configuration. .EXAMPLE - PS C:\> Invoke-D365InstallSqlPackage -SkipExtractFromPage + PS C:\> Invoke-D365InstallSqlPackage -Latest This will download and extract the latest SqlPackage.exe. - It will rely on the Url parameter to based the download from. - It will use the default value of the Url parameter. + It will use https://aka.ms/sqlpackage-windows as the download URL. It will update the path for the SqlPackage.exe in configuration. .EXAMPLE - PS C:\> Invoke-D365InstallSqlPackage -SkipExtractFromPage -Url "https://go.microsoft.com/fwlink/?linkid=3030303" + PS C:\> Invoke-D365InstallSqlPackage -Url "https://go.microsoft.com/fwlink/?linkid=3030303" - This will download and extract the latest SqlPackage.exe. - It will rely on the Url parameter to based the download from. + This will download and extract SqlPackage.exe. + It will rely on the Url parameter to base the download on. It will use the "https://go.microsoft.com/fwlink/?linkid=3030303" as value for the Url parameter. It will update the path for the SqlPackage.exe in configuration. .NOTES Author: Mötz Jensen (@Splaxi) + Author: Florian Hopfner (@FH-Inway) #> function Invoke-D365InstallSqlPackage { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")] - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'ImportUrl')] [OutputType()] param ( + [Parameter(ParameterSetName = 'ImportUrl')] + [Parameter(ParameterSetName = 'ImportLatest')] [string] $Path = "C:\temp\d365fo.tools\SqlPackage", - - [switch] $SkipExtractFromPage, - - [string] $Url = "https://go.microsoft.com/fwlink/?linkid=2196334" + + [Parameter(ParameterSetName = 'ImportLatest')] + [switch] $Latest, + + [Parameter(ParameterSetName = 'ImportUrl')] + [string] $Url = "https://go.microsoft.com/fwlink/?linkid=2261576" ) - if (-not $SkipExtractFromPage) { - $content = (Invoke-WebRequest -Uri "https://learn.microsoft.com/en-us/sql/tools/sqlpackage-download" -UseBasicParsing).content - $res = $content -match 'Windows .NET Core<.*/td>\s*