Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [5.3.0] - 2026-10-08

### Changed

- All Boolean configuration switches now accept `$true`/`$false` **and** `1`/`0`, and reject every other value with a clear error naming the property. Previously the `Reboot`, `Remoting` and `Execution` switches (`Reboot.Enable`, `Reboot.Force`, `Remoting.AllowFallback`, `Execution.InteractiveSequences`) enforced a strict `[bool]` type and threw on `1`, while the older flags (`Binaries.ProductUpdate`, `Binaries.ShutdownServices`, `MountContentDatabase`, `UpgradeContentDatabase`, `SideBySideToken.Enable`) silently coerced any truthy value (so `1` worked but so did a typo like `'false'`, which evaluates to `$true`). A shared `ConvertTo-SPSConfigBoolean` helper now validates and normalizes every switch consistently. ([#76](https://github.com/luigilink/SPSUpdate/issues/76))
Expand Down
22 changes: 10 additions & 12 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
# SPSUpdate - Release Notes

## [5.2.0] - 2026-10-07
## [5.3.0] - 2026-10-08

SPSUpdate 5.2.0 refines the automatic reboot and the live patching dashboard introduced in 5.1.0.
The one-shot reboot-confirmation boot task now runs as `NT AUTHORITY\SYSTEM` (no stored
credential), a deferred reboot already performed out-of-band is reconciled instead of restarting
the server again, and the Binaries Installation card shows the real live patch status right after a
`ProductUpdate` installs a cumulative update.
SPSUpdate 5.3.0 harmonizes how every Boolean switch in the environment configuration is parsed.

### Changed

- **Reboot-confirmation task runs as SYSTEM.** The one-shot `SPSUpdate-RebootConfirm` boot task now runs as `NT AUTHORITY\SYSTEM` instead of the farm InstallAccount decrypted from `secrets.psd1`, removing the stored-credential dependency that could abort the reboot at task registration (`0x8007052E`) and decoupling the reboot from password rotation. `Add-SPSScheduledTask` gains a `-RunAsSystem` switch (mutually exclusive with `-ExecuteAsCredential`). Because a SYSTEM task reaches a UNC status store as the computer account, grant the farm computer accounts (e.g. `Domain Computers`) Modify on the share — add them to `New-SPSDashboardSite.ps1 -WriteAccounts`; `-Action ConfirmReboot` logs a clear, actionable warning when the grant is missing. ([#64](https://github.com/luigilink/SPSUpdate/issues/64))
Previously the `Reboot`, `Remoting` and `Execution` switches (`Reboot.Enable`, `Reboot.Force`,
`Remoting.AllowFallback`, `Execution.InteractiveSequences`) enforced a strict `[bool]` type and
threw on `Reboot.Enable = 1`, while the older flags (`Binaries.ProductUpdate`,
`Binaries.ShutdownServices`, `MountContentDatabase`, `UpgradeContentDatabase`,
`SideBySideToken.Enable`) silently coerced any truthy value — so `1` worked on those, but so did a
typo such as `'false'`, which evaluates to `$true`.

### Added
### Changed

- **Out-of-band reboot reconciliation.** A deferred automatic reboot that was already performed outside SPSUpdate (a manual restart or a Windows Update reboot) is now reconciled instead of restarting the server again: when a `.pending` reboot request predates the server's last boot time, `Invoke-SPSAutomaticReboot` marks the Reboot phase `Done` ("Reboot already completed out-of-band"), clears the pending marker and skips the restart. A fresh reboot required by an install performed in the same run is unaffected. ([#68](https://github.com/luigilink/SPSUpdate/issues/68))
- **Live patch status after `ProductUpdate`.** `-Action ProductUpdate` now refreshes the installed server's live patch status on the Binaries Installation card after the cumulative update is installed, so the column reflects the real post-install state (typically `Upgrade Required` until the Configuration Wizard runs) instead of keeping the pre-install value until the next `Default` run. It reuses the same master-side patch-status read as the `Default` baseline (no remoting) and is status-only. A failed read preserves the last-known-good value. ([#59](https://github.com/luigilink/SPSUpdate/issues/59))
- **All nine Boolean configuration switches now behave the same.** Each one accepts `$true` / `$false` **or** the integers `1` / `0` (`1` = `$true`, `0` = `$false`), and rejects every other value (an out-of-range number, or a string such as `'yes'` / `'false'`) with a clear error naming the property. A shared, unit-tested `ConvertTo-SPSConfigBoolean` helper validates and normalizes every switch, and `Test-SPSUpdateReadiness` applies the same contract at pre-flight time (a bad value is reported as a readiness failure). This also hardens the previously unguarded flags against typos. ([#76](https://github.com/luigilink/SPSUpdate/issues/76))

A full list of changes in each version can be found in the [change log](CHANGELOG.md)
2 changes: 1 addition & 1 deletion src/Modules/SPSUpdate.Common/SPSUpdate.Common.psd1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@{
RootModule = 'SPSUpdate.Common.psm1'
ModuleVersion = '5.2.0'
ModuleVersion = '5.3.0'
GUID = 'd6f4e2b7-3a1c-4d8e-9f2a-6c5b7e0a1d34'
Author = 'Jean-Cyril DROUHIN'
CompanyName = 'luigilink'
Expand Down
Loading