private/maintenance/maintenance.ps1
$scriptBlock = { while ([Dataplat.Dbatools.Connection.ConnectionHost]::PSSessionCountExpired -gt 0) { $session = $null $session = [Dataplat.Dbatools.Connection.ConnectionHost]::PSSessionPurgeExpired() if ($null -ne $session) { $session | Remove-PSSession } } } Register-DbaMaintenanceTask -Name "pssession_cleanup" -ScriptBlock $scriptBlock -Delay (New-TimeSpan -Minutes 1) -Priority Low -Interval (New-TimeSpan -Minutes 1) # Cleans up local references in the current runspace. All actual termination logic is handled by the task above $script:pssession_cleanup_timer = New-Object System.Timers.TImer $script:pssession_cleanup_timer.Interval = 60000 $null = Register-ObjectEvent -InputObject $script:pssession_cleanup_timer -EventName elapsed -SourceIdentifier dbatools_Timer -Action { Get-PSSession | Where-Object State -Like Closed | Remove-PSSession } -ErrorAction Ignore $script:pssession_cleanup_timer.Start() $scriptBlock = { if (-not $Env:TEMP) { $Env:TEMP = [System.IO.Path]::GetTempPath() } Get-ChildItem -Path $Env:TEMP -Filter dbatools* | Remove-Item -ErrorAction Ignore -Recurse } Register-DbaMaintenanceTask -Name "tempcleanup" -ScriptBlock $scriptBlock -Once -Delay (New-TimeSpan -Minutes 1) -Priority Low $scriptBlock = { $ModuleRoot = [Dataplat.Dbatools.dbaSystem.SystemHost]::ModuleBase foreach ($file in (Get-ChildItem -Path "$ModuleRoot\private\functions\tabcompletion" -File)) { Import-Command -Path $file.FullName } foreach ($file in (Get-ChildItem -Path "$ModuleRoot\private\dynamicparams\" -File)) { Import-Command -Path $file.FullName } [Dataplat.Dbatools.TabExpansion.TabExpansionHost]::CalculateTabExpansion() } Register-DbaMaintenanceTask -Name "teppInsertTask" -ScriptBlock $scriptBlock -Once |