diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs
index b33bdbd502..4c68f32288 100644
--- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs
+++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs
@@ -34,7 +34,7 @@ protected override void ProcessRecord()
}
else
{
- command.Assert(this.Version);
+ command.Assert(this.Version, this.IncludePrerelease.ToBool());
}
}
}
diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs
index 3d2f4d16d7..7d2bd9121e 100644
--- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs
+++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs
@@ -34,7 +34,6 @@ public abstract class WinGetPackageManagerCmdlet : PSCmdlet
/// Gets or sets a value indicating whether to include prerelease winget versions.
///
[Parameter(
- ParameterSetName = Constants.IntegrityLatestSet,
ValueFromPipelineByPropertyName = true)]
public SwitchParameter IncludePrerelease { get; set; }
}
diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs
index b3e6ae4df2..4939355878 100644
--- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs
+++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs
@@ -49,7 +49,7 @@ protected override void ProcessRecord()
}
else
{
- this.command.Repair(this.Version, this.AllUsers.ToBool(), this.Force.ToBool());
+ this.command.Repair(this.Version, this.AllUsers.ToBool(), this.Force.ToBool(), this.IncludePrerelease.ToBool());
}
}
diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs
index cdf5f16d51..aa529cab98 100644
--- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs
+++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs
@@ -56,8 +56,11 @@ public void AssertUsingLatest(bool preRelease)
/// Asserts the version installed is the specified.
///
/// The expected version.
- public void Assert(string expectedVersion)
+ /// Include prerelease versions when validating the specified version.
+ public void Assert(string expectedVersion, bool preRelease = false)
{
+ // The preRelease parameter is for consistency but not used in this method
+ // since we're checking for an exact version match
WinGetIntegrity.AssertWinGet(this, expectedVersion);
}
@@ -88,12 +91,21 @@ public void RepairUsingLatest(bool preRelease, bool allUsers, bool force)
/// The expected version, if any.
/// Install for all users. Requires admin.
/// Force application shutdown.
- public void Repair(string expectedVersion, bool allUsers, bool force)
+ /// Include prerelease versions when searching for the specified version.
+ public void Repair(string expectedVersion, bool allUsers, bool force, bool preRelease = false)
{
this.ValidateWhenAllUsers(allUsers);
var runningTask = this.RunOnMTA(
async () =>
{
+ // If no specific version is provided and IncludePrerelease is specified,
+ // we need to get the latest prerelease version
+ if (string.IsNullOrEmpty(expectedVersion) && preRelease)
+ {
+ var gitHubClient = new GitHubClient(RepositoryOwner.Microsoft, RepositoryName.WinGetCli);
+ expectedVersion = await gitHubClient.GetLatestReleaseTagNameAsync(true);
+ }
+
await this.RepairStateMachineAsync(expectedVersion, allUsers, force);
return true;
});