This one's a whopper! 🍔
What's Changed
- Get-DbaKbUpdate - Add TimeoutSec so a silent update catalog cannot hang the command by @andreasjordan in #10477
- Claude Code - Add an issue workflow skill and document the test instance fixtures by @andreasjordan in #10479
- Set-DbaAgentSchedule - Keep the frequency settings when they are not part of the change by @andreasjordan in #10480
- Network certificate commands - Find the configured certificate even when it is archived by @andreasjordan in #10478
- Tests - Make three dead mocks apply, harden the update catalog probe and clear the last top-level statements by @andreasjordan in #10481
- Update-DbaInstance - Un-skip the unit tests, and allow -ForEach when the cases come from BeforeDiscovery by @andreasjordan in #10482
- Tests - Recover the tests that a foreach around It never created by @andreasjordan in #10484
- CI - Kill a wedged test file fast instead of burning the 90 minute job timeout by @potatoqualitee in #10483
- Tests - Stop Get-DbaBuild from downloading the build reference index during a unit test by @andreasjordan in #10488
- Tests - Make the assertions that could never fail actually assert by @andreasjordan in #10486
- Docs - Make tests/CLAUDE.md the single source for the test standards by @andreasjordan in #10485
- Install-DbaFirstResponderKit: Added ability to create certificates to let public execute FRK procedures by @ReeceGoding in #10463
- CI - Fix the two things stopping @claude from doing work by @potatoqualitee in #10489
- Tests - Standardise the last four parameter validation tests by @andreasjordan in #10491
- Tests - Recover two skipped tests and give the rest a reason for being skipped by @andreasjordan in #10490
- Tests - Rename two test files to match the command they test by @andreasjordan in #10492
- Get-DbaDbFile - Read the file layout from master when a database cannot be opened by @potatoqualitee in #10496
- TEPP - Start the asynchronous cache runspace on the first tab completion instead of at import by @potatoqualitee in #10494
- runner fleet - Size CI runner lanes to queued work and instrument VM lifetimes by @potatoqualitee in #10493
- Get-DbaUnusedLogin - Match the login name case-sensitively when reading last login time by @potatoqualitee in #10498
- Get-DbaDbFileGroup, Get-DbaDbLogSpace, Get-DbaDbSpace and Get-DbaDbVirtualLogFile - Warn instead of silently skipping a database that cannot be opened by @potatoqualitee in #10499
- CI - Add restricted Codex issue agent by @potatoqualitee in #10497
- Claude workflows - Fix bubblewrap home mount setup by @potatoqualitee in #10502
- runner fleet - Restore maintainer capacity and repair VMSS drift by @potatoqualitee in #10500
- Stop the test heartbeat from failing the stage when the watchdog is reading it by @potatoqualitee in #10503
- CI - Rename Azure Codex issue trigger by @potatoqualitee in #10501
- CI - Cancel superseded ci-azure runs so the newest head owns the lane (do Get-DbaBuild) by @potatoqualitee in #10504
- Use SqlClient SSPI provider for Windows credentials by @potatoqualitee in #10495
- Run the VMSS runner fleet from an Azure Function instead of a five-minute Actions cron by @potatoqualitee in #10506
- Start-DbaAzMigration - Add Azure SQL BACPAC migration by @potatoqualitee in #10505
- Stop the potato CI marker from skipping every merge to development by @potatoqualitee in #10508
- CI runners - Replace the bootstrap reboot and autologon with a LocalSystem runner service by @potatoqualitee in #10509
- Invoke-DbaDbIndexRebuild - Add index and heap maintenance command by @potatoqualitee in #10507
- Bump the github-actions group with 2 updates by @dependabot[bot] in #10510
- ci-azure - Skip the Windows SSPI test when the build exits early by @potatoqualitee in #10515
- ps3-smoke - retry teardown deletes and warn when resources leak by @potatoqualitee in #10516
- Invoke-ManualPester - Check the test file and the repository style gate by @andreasjordan in #10518
- InModule.Help - Make the help tests actually run by @andreasjordan in #10519
- Docs - Point CI documentation at ci-azure instead of AppVeyor by @andreasjordan in #10521
- Pester 6 - Drop stale v4/v5 references and take the version out of names by @andreasjordan in #10520
- Data generation - Make the supported randomizer types match what actually generates by @andreasjordan in #10517
- Copy-DbaDatabase - Fix empty -NewName destination sweep and piped multi-database failures by @potatoqualitee in #10514
- Tests - Replace the $env:APPVEYOR skips with real preconditions by @andreasjordan in #10522
- Enable-DbaFilestream - Report what the WMI provider actually returned by @andreasjordan in #10525
- Import-DbaParquet - Report why the Parquet assemblies could not be loaded by @andreasjordan in #10526
- New-DbaDacPackage - Report the real reason model validation failed by @andreasjordan in #10527
- New-DbaFirewallRule - Stop blaming a disabled DAC for a cycled ERRORLOG by @andreasjordan in #10528
- Set-DbaLogin - Return the login as it is after unlocking it with a new password by @andreasjordan in #10530
- Tests - Run without warnings and fix test cases that never ran by @andreasjordan in #10531
- Tests - Stop writing a file called null into the current directory by @andreasjordan in #10532
- Query Store - Warn instead of silently skipping named system databases by @andreasjordan in #10533
- Test-DbaPath - Silence the expected warnings of the mocked failure tests by @andreasjordan in #10534
- Fleet controller - Compensate VMSS capacity for phantom drift one settled mutation at a time by @potatoqualitee in #10540
- Import-DbaParquet - Stop leaving an assembly resolver registered for the whole process by @andreasjordan in #10541
- Query Store - Silence the expected warnings of the system database tests by @andreasjordan in #10535
- Install-DbaParquet - Keep the assemblies of the two PowerShell editions apart by @andreasjordan in #10538
- Import-DbaParquet - Release the parquet file when the import is done by @andreasjordan in #10543
- Install-DbaCommunitySoftware - add unified community tooling installer (do Install-DbaCommunitySoftware) by @potatoqualitee in #10565
- Connect-DbaInstance / Invoke-DbaQuery - Do not close connections of the caller and do not reuse them for the wrong database by @andreasjordan in #10564
- Set-DbaDbQueryStoreOption - Run the ALTER DATABASE statements on the server connection by @andreasjordan in #10558
- Issue skill - Read the issue body and its comments in one call by @andreasjordan in #10553
- Export-DbaInstance - Script us_english custom errors before their translations by @andreasjordan in #10552
- Save-DbaCommunitySoftware - Accept an array of Software values, add All by @potatoqualitee in #10545
- Set-DbaPrivilege - Write secedit's working database to temp, not cwd by @potatoqualitee in #10544
- Tests - Stop leaving backup files behind in the lab by @andreasjordan in #10539
- CI - Skip Azure migration tests on Dependabot pushes by @potatoqualitee in #10566
- Bump the github-actions group across 1 directory with 2 updates by @dependabot[bot] in #10546
- Get-DbaDbExtentDiff - Leave the connection of the caller alone by @andreasjordan in #10567
- Update-DbaMaintenanceSolution - Update the procedures in the database that was named and leave the connection of the caller alone by @andreasjordan in #10568
- Import-DbaBinaryFile - Work with a connection that is already open by @andreasjordan in #10571
- Install-DbaMaintenanceSolution - Leave the connection of the caller alone by @andreasjordan in #10570
- SQL Server 2025 CU8 by @MikeyBronowski in #10574
- Import-DbaSpConfigure - Leave the connection of the caller alone and make the migration work again by @andreasjordan in #10575
- Invoke-DbaAdvancedRestore - Leave the connection of the caller alone by @andreasjordan in #10576
- Registered server commands - Leave the connection of the caller alone by @andreasjordan in #10577
- Testing Backup-DbaDatabase - Restore model after the all-databases backup test by @andreasjordan in #10582
- Bump anthropics/claude-code-action from 1.0.190 to 1.0.193 in the github-actions group by @dependabot[bot] in #10585
- Clarify private key permissions in Set-DbaNetworkCertificate help by @andreasjordan in #10586
- Get-DbaWsfc* - Fix the State property read from an undefined variable, and report the witness path by @andreasjordan in #10588
- Invoke-DbaDbDecryptObject - Add DataPages to decrypt without a dedicated admin connection by @howarthcd in #10581
- Add Find-DbaDbQueryStoreRegression by @deepeshd87 in #10589
- Invoke-DbaDbDecryptObject - reject ambiguous ciphertext chunks by @potatoqualitee in #10591
- Database context - Run server level statements on the connection by @andreasjordan in #10580
- Set-DbaDbQueryStoreOption - Refresh the Query Store options after changing them with T-SQL by @andreasjordan in #10593
- Get-DbaDbQueryStoreOption - Read from SMO what SMO carries, and query only the rest by @andreasjordan in #10592
- Copy-DbaSsisCatalog - Require SQL Server 2012 on the destination, as the help already promises by @andreasjordan in #10601
- Connect-DbaInstance - Make MinimumVersion decide on a version it can read by @andreasjordan in #10597
- Testing Get-DbaRandomizedValue - Decide emptiness without a culture sensitive comparison by @andreasjordan in #10599
- Copy-DbaAgentSchedule - Make -Force actually drop and recreate existing schedules by @andreasjordan in #10596
- Bump the github-actions group with 2 updates by @dependabot[bot] in #10598
- Testing Get-DbaDbQueryStoreOption - Create the database before anything has read model by @andreasjordan in #10595
- Connect-DbaInstance - Give the cloned server ownership of its database connection by @andreasjordan in #10584
- Database context - Put the database back in the Query and Invoke script methods by @andreasjordan in #10579
- Database context - Add Restore-DatabaseContext and fix eighteen commands by @andreasjordan in #10603
- New-DbaFirewallRule - Adapt the tests to a default instance on the default port by @andreasjordan in #10605
- Rename-DbaDatabase - Build expected file paths without validating drives of the test client by @andreasjordan in #10606
- Remove-DbaAgDatabase - Honor the AvailabilityGroup filter by @andreasjordan in #10608
- Remove-DbaAgListener - Honor the AvailabilityGroup filter by @andreasjordan in #10609
- Get-DbaDbTable - Make IncludeSystemDBs actually exclude system databases by default by @andreasjordan in #10610
- Get-DbaDiskSpace - Make Unit work and clean up the two other dead parameters by @andreasjordan in #10611
- Testing Get-DbaNetworkConfiguration - Certify the virtual name of a cluster instance by @andreasjordan in #10613
- Test-DbaDiskAlignment - Reach a failover cluster instance through its virtual name by @andreasjordan in #10614
- Set-DbaTempDbConfig - Make forced file removal survive work tables and stop resetting the log growth by @andreasjordan in #10615
- Get-DbaPrivilege, Set-DbaPrivilege - Pass the credential to the connectivity test and the service discovery by @andreasjordan in #10616
- Data generation - Stop on configuration errors and write the generated unique values by @andreasjordan in #10618
- Testing New-DbaDbDataGeneratorConfig - Guard columntypes.json against the randomizer types by @andreasjordan in #10619
- Testing Get-DbaDbRestoreHistory - Give every backup its own file so the diff always finds its full by @andreasjordan in #10620
- Get-DbaWaitingTask - Harden flaky test setup and fix always-null InfoUrl by @andreasjordan in #10622
- Fix case sensitivity defects in 15 test files by @andreasjordan in #10623
- Get-DbaDbMailHistory - Make the Status filter work on case sensitive instances by @andreasjordan in #10624
- Get-DbaDbMailLog - Make the Type filter work on case sensitive instances by @andreasjordan in #10625
- Install-DbaWhoIsActive - Detect an existing installation on case sensitive instances by @andreasjordan in #10626
- Set-DbaDbFileGroup - Resolve filegroups reliably on case sensitive databases by @andreasjordan in #10627
- Keep version groups out of the leftover-lane exclusion by @andreasjordan in #10629
- Move the two mixed-instance test files wholly into the MULTI lane by @andreasjordan in #10628
- Testing Find-DbaCommand - Restore the index file the Rebuild test overwrites by @andreasjordan in #10630
- Get-DbaAgBackupHistory - Fix single replica discovery and honor EnableException by @andreasjordan in #10632
- Add-DbaRegServer - Close the store connection its verification call reopens by @andreasjordan in #10633
- Export-DbaCsv - Close the database-scoped connection it opens per call by @andreasjordan in #10634
- Get-DbaXESession - Close the cloned connection behind the XEStore by @andreasjordan in #10635
- Get-DbaDatabase - Stop eating the caller loop on invalid parameter combination by @andreasjordan in #10637
- Get-DbaRandomizedValue - Stop eating the caller loop on invalid parameters by @andreasjordan in #10640
- Test-DbaLastBackup - Stop eating the caller loop on inaccessible directories by @andreasjordan in #10639
- Import-DbaSpConfigure - Stop eating the caller loop and skipping its own cleanup by @andreasjordan in #10641
- New-DbaAvailabilityGroup - Let the validation guards reach their own return by @andreasjordan in #10642
- Log shipping - Let helper failures reach the caller instead of escaping it by @andreasjordan in #10644
- Get-DbaRandomizedDataset - Stop eating the caller loop on template validation by @andreasjordan in #10645
- Import-DbaBinaryFile - Stop eating the caller loop on FilePath validation by @andreasjordan in #10646
- New-DbaDbDataGeneratorConfig - Stop eating the caller loop on failures by @andreasjordan in #10647
- Get-DbaRandomizedType - Stop eating the caller loop when the type list is missing by @andreasjordan in #10648
- Invoke-DbaDbDataGenerator - Stop eating the caller loop when Bogus fails to load by @andreasjordan in #10649
- Convert-DbaMaskingValue - Stop eating the caller loop on missing input by @andreasjordan in #10650
- New-DbaReplSubscription - Remove the latent continue escape and guard the process block by @andreasjordan in #10652
- Set-DbaAgentOperator - Stop eating the caller loop on connection failure by @andreasjordan in #10653
- Invoke-DbaPfRelog - Stop eating the caller loop when no blg files match by @andreasjordan in #10643
- Add-DbaReplArticle - Stop eating the caller loop on parameter validation by @andreasjordan in #10651
- Add-DbaAgListener - Stop demanding databases the command does not know by @andreasjordan in #10612
- Get-DbaWsfcResourceGroup - Name the PartialOnline and Pending states of a resource group by @andreasjordan in #10673
- Set-DbaNetworkCertificate - Say why a private key is unsuitable by @andreasjordan in #10671
- Tests - Case sensitive lookups and backup cleanup in seven test files by @andreasjordan in #10670
- Install-DbaFirstResponderKit - Use the declared variable name when cloning the certificate to master by @andreasjordan in #10669
- Get-DbaComputerCertificate - Keep the friendly name of certificates on remote computers by @andreasjordan in #10668
- SSIS commands - Say why they refuse to run on PowerShell 7 by @andreasjordan in #10665
- Policy Based Management - Run on PowerShell 7 on Windows by @andreasjordan in #10664
- Connect-DbaInstance - Keep the tab completion cache of instance names an array by @andreasjordan in #10672
- Security updates for SQL 2025, 2022, 2019, 2017 - September 8, 2026 by @MikeyBronowski in #10681
- Bump the github-actions group with 2 updates by @dependabot[bot] in #10663
- Copy-DbaDbTableData - Close the source reader when the bulk copy fails by @andreasjordan in #10686
- Invoke-DbaDbLogShipping - Give the helper failure test a UNC shared path on CI by @andreasjordan in #10684
- Get-DbaWindowsLog - Compile the remote script inside the pool runspace so local instances do not hang by @andreasjordan in #10683
- Copy-DbaDbTableData - Name the Query requirement in the parameter guard message by @andreasjordan in #10678
- Get-BulkRowsCopiedCount - Read the rows copied counter as Int64 by @andreasjordan in #10677
- Invoke-DbaDbDecryptObject - Read the family GUID from sys.database_recovery_status instead of DBCC DBINFO by @howarthcd in #10680
- Restore-DbaDatabase - Honor EnableException in the backup information pipeline by @andreasjordan in #10631
- Restore-DbaDatabase - Stop escaping the caller and resurrect the StopAt tests by @andreasjordan in #10636
- Workflows - Pull MinIO from quay.io and mc from GitHub releases by @andreasjordan in #10688
- Password decryption commands - Document the remote DAC prerequisite by @andreasjordan in #10551
- Copy-DbaDatabase - Name -AllDatabases in the examples that migrate every database by @andreasjordan in #10689
- Workflows - Wait for the SQL Server containers before running the core tests by @andreasjordan in #10690
- Invoke-DbaQuery - Close the connection it opened when the query fails by @andreasjordan in #10691
- Progress bars - Complete the bars that 22 commands left behind by @andreasjordan in #10660
- Restore-DbaDatabase - Say that nothing was restored when the selection is empty by @andreasjordan in #10692
- Pin dbatools.library to 2.x SSPI by @potatoqualitee in #10716
- Bump the github-actions group with 2 updates by @dependabot[bot] in #10715
- Copy-DbaDbTableData - Map query columns onto the writable destination columns by @andreasjordan in #10666
- Install-DbaMaintenanceSolution - Close the connection it opened when it skips an instance by @andreasjordan in #10693
- Update-DbaMaintenanceSolution - Close the connection it opened when it skips an instance by @andreasjordan in #10694
- Get-DbaDbObjectTrigger - Stop eating the caller loop on an input object that is not a table or view by @andreasjordan in #10697
- Stop-DbaExternalProcess - Stop eating the caller loop when the process cannot be stopped by @andreasjordan in #10698
- Remove-DbaXESession - Return the store connection after removing a session by @andreasjordan in #10712
- Stop-DbaXESession - Return the store connection after stopping a session by @andreasjordan in #10711
- Dead parameters - Wire up seven parameters that were declared and documented but never read by @andreasjordan in #10708
- Command invariants - Add the missing Test-FunctionInterrupt guards and fix the Test-Bound typo in Export-DbaExecutionPlan by @andreasjordan in #10707
- Invoke-DbaDbDecryptObject - Stop eating the caller loop when the export folder cannot be created by @andreasjordan in #10706
- Convert-DbaIndexToTable - Stop eating the caller loop when no instance is given by @andreasjordan in #10705
- Get-LoginPasswordHash - Stop eating the caller loop when the hash query fails by @andreasjordan in #10704
- Expand-DbaDbLogFile - Stop eating the caller loop when the log file processing fails by @andreasjordan in #10703
- Export-DbaDacPackage - Stop eating the caller loop when only ExcludeDatabase is given by @andreasjordan in #10702
- New-DbaAzAccessToken - Stop eating the caller loop when the token request fails by @andreasjordan in #10700
- Get-DbaWaitResource - Stop eating the caller loop on connection failure by @andreasjordan in #10699
- Start-DbaXESession - Return the store connection after starting a session by @andreasjordan in #10710
- 2026 sept CUs by @niphlod in #10719
- Get-DbaBackupInformation - Stop eating the caller loop when a backup header cannot be read by @andreasjordan in #10701
- Copy-DbaDatabase - Stop eating the caller loop when a system database is requested by @andreasjordan in #10696
- Invoke-DbaAdvancedRestore - Stop applying logs once the stop mark is reached by @andreasjordan in #10695
- Enable-DbaAgHadr, Disable-DbaAgHadr - Report a refused service restart instead of ignoring it by @andreasjordan in #10709
New Contributors
- @deepeshd87 made their first contribution in #10589
Full Changelog: v2.8.4...v2.9.0