From e8ed63fac0a5fd38fab4aeef5f8dabcbe5349482 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Thu, 29 Jul 2021 20:37:49 +0200 Subject: [PATCH 01/15] initial test with global --- dbatools.psm1 | 5 ++++- functions/Connect-DbaInstance.ps1 | 10 ++++++++++ functions/Get-ConnectedInstance.ps1 | 31 +++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 functions/Get-ConnectedInstance.ps1 diff --git a/dbatools.psm1 b/dbatools.psm1 index 4d574fe70c..b18de82ecc 100644 --- a/dbatools.psm1 +++ b/dbatools.psm1 @@ -1084,4 +1084,7 @@ $onRemoveScript = { Get-Runspace | Where-Object Name -like dbatools* | ForEach-Object -Process { $_.Dispose() } } $ExecutionContext.SessionState.Module.OnRemove += $onRemoveScript -Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Action $onRemoveScript \ No newline at end of file +Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Action $onRemoveScript + +# Create collection for servers +$global:connectionhash = @{ } \ No newline at end of file diff --git a/functions/Connect-DbaInstance.ps1 b/functions/Connect-DbaInstance.ps1 index 38cfa1eb2a..4d737bb562 100644 --- a/functions/Connect-DbaInstance.ps1 +++ b/functions/Connect-DbaInstance.ps1 @@ -964,6 +964,7 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "We return only SqlConnection in server.ConnectionContext.SqlConnectionObject" + $global:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } @@ -1123,12 +1124,14 @@ function Connect-DbaInstance { Write-Message -Level Debug -Message "Connection is already open, test if database has to be changed" if ('' -eq $Database) { Write-Message -Level Debug -Message "No database specified, so return instance.InputObject" + $global:connectionhash[$instance] = $instance.InputObject $instance.InputObject continue } $currentdb = $instance.InputObject.ConnectionContext.ExecuteScalar("select db_name()") if ($currentdb -eq $Database) { Write-Message -Level Debug -Message "Same database specified, so return instance.InputObject" + $global:connectionhash[$instance] = $instance.InputObject $instance.InputObject continue } else { @@ -1236,6 +1239,8 @@ function Connect-DbaInstance { if ($currentdb) { Add-Member -InputObject $server -NotePropertyName Databases -NotePropertyValue @{ $currentdb.Name = $currentdb } -Force }#> + + $global:connectionhash[$instance] = $server $server continue } catch { @@ -1251,6 +1256,7 @@ function Connect-DbaInstance { $instance.InputObject.ConnectionContext.Connect() } if ($SqlConnectionOnly) { + $global:connectionhash[$instance] = $instance.InputObject.ConnectionContext.SqlConnectionObject $instance.InputObject.ConnectionContext.SqlConnectionObject continue } else { @@ -1293,6 +1299,7 @@ function Connect-DbaInstance { Stop-Function -Target $instance -Message "Azure SQL Database not supported" -Continue } Write-Message -Level Debug -Message "We return server.ConnectionContext.SqlConnectionObject" + $global:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1322,6 +1329,7 @@ function Connect-DbaInstance { [Sqlcollaborative.Dbatools.TabExpansion.TabExpansionHost]::Cache["sqlinstance"] += $instance.FullSmoName.ToLowerInvariant() } Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" + $global:connectionhash[$instance] = $server $server continue } @@ -1545,6 +1553,7 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "SqlConnectionOnly, so returning server.ConnectionContext.SqlConnectionObject" + $global:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1589,6 +1598,7 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" + $global:connectionhash[$instance] = $server $server continue } diff --git a/functions/Get-ConnectedInstance.ps1 b/functions/Get-ConnectedInstance.ps1 new file mode 100644 index 0000000000..b0e2546fb7 --- /dev/null +++ b/functions/Get-ConnectedInstance.ps1 @@ -0,0 +1,31 @@ +function Get-ConnectedInstance { + <# + .SYNOPSIS + Get a list of all connected instances. + + .DESCRIPTION + Get a list of all connected instances + + .NOTES + Tags: Connection + Author: Chrissy LeMaire (@cl), netnerds.net + + Website: https://dbatools.io + Copyright: (c) 2021 by dbatools, licensed under MIT + License: MIT https://opensource.org/licenses/MIT + + .LINK + https://dbatools.io/Get-ConnectedInstance + + .EXAMPLE + PS C:\> Get-ConnectedInstance + + Gets all connections + + #> + [CmdletBinding()] + param () + process { + $global:connectionhash + } +} \ No newline at end of file From 1b20eb6e1d16597be0df6e358ed2de55cfeb6986 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Thu, 29 Jul 2021 20:57:29 +0200 Subject: [PATCH 02/15] update --- dbatools.psm1 | 2 +- functions/Connect-DbaInstance.ps1 | 29 ++++++++++++++++++++--------- functions/Get-ConnectedInstance.ps1 | 13 +++++++++---- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/dbatools.psm1 b/dbatools.psm1 index b18de82ecc..4d6d6e9ee9 100644 --- a/dbatools.psm1 +++ b/dbatools.psm1 @@ -1087,4 +1087,4 @@ $ExecutionContext.SessionState.Module.OnRemove += $onRemoveScript Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Action $onRemoveScript # Create collection for servers -$global:connectionhash = @{ } \ No newline at end of file +$script:connectionhash = @{ } \ No newline at end of file diff --git a/functions/Connect-DbaInstance.ps1 b/functions/Connect-DbaInstance.ps1 index 4d737bb562..49c91bd82f 100644 --- a/functions/Connect-DbaInstance.ps1 +++ b/functions/Connect-DbaInstance.ps1 @@ -964,7 +964,8 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "We return only SqlConnection in server.ConnectionContext.SqlConnectionObject" - $global:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } @@ -1067,6 +1068,8 @@ function Connect-DbaInstance { } } + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $server Write-Message -Level Debug -Message "We are finished with this instance" continue } @@ -1124,14 +1127,16 @@ function Connect-DbaInstance { Write-Message -Level Debug -Message "Connection is already open, test if database has to be changed" if ('' -eq $Database) { Write-Message -Level Debug -Message "No database specified, so return instance.InputObject" - $global:connectionhash[$instance] = $instance.InputObject + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $instance.InputObject $instance.InputObject continue } $currentdb = $instance.InputObject.ConnectionContext.ExecuteScalar("select db_name()") if ($currentdb -eq $Database) { Write-Message -Level Debug -Message "Same database specified, so return instance.InputObject" - $global:connectionhash[$instance] = $instance.InputObject + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $instance.InputObject $instance.InputObject continue } else { @@ -1240,7 +1245,8 @@ function Connect-DbaInstance { Add-Member -InputObject $server -NotePropertyName Databases -NotePropertyValue @{ $currentdb.Name = $currentdb } -Force }#> - $global:connectionhash[$instance] = $server + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $server $server continue } catch { @@ -1256,7 +1262,8 @@ function Connect-DbaInstance { $instance.InputObject.ConnectionContext.Connect() } if ($SqlConnectionOnly) { - $global:connectionhash[$instance] = $instance.InputObject.ConnectionContext.SqlConnectionObject + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $instance.InputObject.ConnectionContext.SqlConnectionObject $instance.InputObject.ConnectionContext.SqlConnectionObject continue } else { @@ -1299,7 +1306,8 @@ function Connect-DbaInstance { Stop-Function -Target $instance -Message "Azure SQL Database not supported" -Continue } Write-Message -Level Debug -Message "We return server.ConnectionContext.SqlConnectionObject" - $global:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1329,7 +1337,8 @@ function Connect-DbaInstance { [Sqlcollaborative.Dbatools.TabExpansion.TabExpansionHost]::Cache["sqlinstance"] += $instance.FullSmoName.ToLowerInvariant() } Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" - $global:connectionhash[$instance] = $server + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $server $server continue } @@ -1553,7 +1562,8 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "SqlConnectionOnly, so returning server.ConnectionContext.SqlConnectionObject" - $global:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1598,7 +1608,8 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" - $global:connectionhash[$instance] = $server + Write-Message -Level Debug -Message "Adding to connection hash" + $script:connectionhash[$instance] = $server $server continue } diff --git a/functions/Get-ConnectedInstance.ps1 b/functions/Get-ConnectedInstance.ps1 index b0e2546fb7..98dd6c8f83 100644 --- a/functions/Get-ConnectedInstance.ps1 +++ b/functions/Get-ConnectedInstance.ps1 @@ -1,4 +1,4 @@ -function Get-ConnectedInstance { +function Get-DbaConnectedInstance { <# .SYNOPSIS Get a list of all connected instances. @@ -15,10 +15,10 @@ function Get-ConnectedInstance { License: MIT https://opensource.org/licenses/MIT .LINK - https://dbatools.io/Get-ConnectedInstance + https://dbatools.io/Get-DbaConnectedInstance .EXAMPLE - PS C:\> Get-ConnectedInstance + PS C:\> Get-DbaConnectedInstance Gets all connections @@ -26,6 +26,11 @@ function Get-ConnectedInstance { [CmdletBinding()] param () process { - $global:connectionhash + foreach ($key in $script:connectionhash.Keys) { + [pscustomobject]@{ + SqlInstance = $key + Connection = $script:connectionhash[$key] + } + } } } \ No newline at end of file From 83af9216303ac7d495428f870bab4453d86f63bc Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Thu, 29 Jul 2021 21:04:33 +0200 Subject: [PATCH 03/15] oops --- functions/Connect-DbaInstance.ps1 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/functions/Connect-DbaInstance.ps1 b/functions/Connect-DbaInstance.ps1 index 49c91bd82f..f664abe473 100644 --- a/functions/Connect-DbaInstance.ps1 +++ b/functions/Connect-DbaInstance.ps1 @@ -965,7 +965,7 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "We return only SqlConnection in server.ConnectionContext.SqlConnectionObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject + $script:connectionhash[$instance.InputObject] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } @@ -1069,7 +1069,7 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $server + $script:connectionhash[$instance.InputObject] = $server Write-Message -Level Debug -Message "We are finished with this instance" continue } @@ -1128,7 +1128,7 @@ function Connect-DbaInstance { if ('' -eq $Database) { Write-Message -Level Debug -Message "No database specified, so return instance.InputObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $instance.InputObject + $script:connectionhash[$instance.InputObject] = $instance.InputObject $instance.InputObject continue } @@ -1136,7 +1136,7 @@ function Connect-DbaInstance { if ($currentdb -eq $Database) { Write-Message -Level Debug -Message "Same database specified, so return instance.InputObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $instance.InputObject + $script:connectionhash[$instance.InputObject] = $instance.InputObject $instance.InputObject continue } else { @@ -1246,7 +1246,7 @@ function Connect-DbaInstance { }#> Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $server + $script:connectionhash[$instance.InputObject] = $server $server continue } catch { @@ -1263,7 +1263,7 @@ function Connect-DbaInstance { } if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $instance.InputObject.ConnectionContext.SqlConnectionObject + $script:connectionhash[$instance.InputObject] = $instance.InputObject.ConnectionContext.SqlConnectionObject $instance.InputObject.ConnectionContext.SqlConnectionObject continue } else { @@ -1307,7 +1307,7 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "We return server.ConnectionContext.SqlConnectionObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject + $script:connectionhash[$instance.InputObject] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1338,7 +1338,7 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $server + $script:connectionhash[$instance.InputObject] = $server $server continue } @@ -1563,7 +1563,7 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "SqlConnectionOnly, so returning server.ConnectionContext.SqlConnectionObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $server.ConnectionContext.SqlConnectionObject + $script:connectionhash[$instance.InputObject] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1609,7 +1609,7 @@ function Connect-DbaInstance { Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance] = $server + $script:connectionhash[$instance.InputObject] = $server $server continue } From b10e3dbc1ba282dc6c51255328ac2717e3b74b09 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Thu, 29 Jul 2021 23:30:18 +0200 Subject: [PATCH 04/15] use connectionstring as index --- functions/Connect-DbaInstance.ps1 | 20 ++++++++------------ functions/Get-ConnectedInstance.ps1 | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/functions/Connect-DbaInstance.ps1 b/functions/Connect-DbaInstance.ps1 index f664abe473..bcd23f2f2a 100644 --- a/functions/Connect-DbaInstance.ps1 +++ b/functions/Connect-DbaInstance.ps1 @@ -965,7 +965,7 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "We return only SqlConnection in server.ConnectionContext.SqlConnectionObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $server.ConnectionContext.SqlConnectionObject + $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } @@ -1069,7 +1069,7 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $server + $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server Write-Message -Level Debug -Message "We are finished with this instance" continue } @@ -1127,16 +1127,12 @@ function Connect-DbaInstance { Write-Message -Level Debug -Message "Connection is already open, test if database has to be changed" if ('' -eq $Database) { Write-Message -Level Debug -Message "No database specified, so return instance.InputObject" - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $instance.InputObject $instance.InputObject continue } $currentdb = $instance.InputObject.ConnectionContext.ExecuteScalar("select db_name()") if ($currentdb -eq $Database) { Write-Message -Level Debug -Message "Same database specified, so return instance.InputObject" - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $instance.InputObject $instance.InputObject continue } else { @@ -1246,7 +1242,7 @@ function Connect-DbaInstance { }#> Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $server + $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server $server continue } catch { @@ -1263,7 +1259,7 @@ function Connect-DbaInstance { } if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $instance.InputObject.ConnectionContext.SqlConnectionObject + $script:connectionhash[$instance.InputObject.ConnectionContext.ConnectionString] = $instance.InputObject.ConnectionContext.SqlConnectionObject $instance.InputObject.ConnectionContext.SqlConnectionObject continue } else { @@ -1307,7 +1303,7 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "We return server.ConnectionContext.SqlConnectionObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $server.ConnectionContext.SqlConnectionObject + $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1338,7 +1334,7 @@ function Connect-DbaInstance { } Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $server + $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server $server continue } @@ -1563,7 +1559,7 @@ function Connect-DbaInstance { if ($SqlConnectionOnly) { Write-Message -Level Debug -Message "SqlConnectionOnly, so returning server.ConnectionContext.SqlConnectionObject" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $server.ConnectionContext.SqlConnectionObject + $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1609,7 +1605,7 @@ function Connect-DbaInstance { Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject] = $server + $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server $server continue } diff --git a/functions/Get-ConnectedInstance.ps1 b/functions/Get-ConnectedInstance.ps1 index 98dd6c8f83..ca47ca7350 100644 --- a/functions/Get-ConnectedInstance.ps1 +++ b/functions/Get-ConnectedInstance.ps1 @@ -28,7 +28,7 @@ function Get-DbaConnectedInstance { process { foreach ($key in $script:connectionhash.Keys) { [pscustomobject]@{ - SqlInstance = $key + SqlInstance = (Hide-ConnectionString -ConnectionString $key) Connection = $script:connectionhash[$key] } } From 8589924b01961c465196b20aa85e372ecdabcc7f Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 07:51:18 +0200 Subject: [PATCH 05/15] add test --- tests/Get-DbaConnectedInstance.Tests.ps1 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tests/Get-DbaConnectedInstance.Tests.ps1 diff --git a/tests/Get-DbaConnectedInstance.Tests.ps1 b/tests/Get-DbaConnectedInstance.Tests.ps1 new file mode 100644 index 0000000000..2469484f8e --- /dev/null +++ b/tests/Get-DbaConnectedInstance.Tests.ps1 @@ -0,0 +1,15 @@ +$CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "") +Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan +. "$PSScriptRoot\constants.ps1" + +Describe "$commandname Integration Tests" -Tag "IntegrationTests" { + BeforeAll { + $db = Get-DbaDatabase -SqlInstance $script:instance1 -Database $dbname + } + Context "gets connected objects" { + It "returns some results" { + $results = Get-DbaConnectedInstance + $results.Count | Should -BeGreaterThan 0 + } + } +} \ No newline at end of file From 6cf00356e1753756729d0f264c7a6bef7fa63ff4 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 07:51:41 +0200 Subject: [PATCH 06/15] rename file, change output --- ...et-ConnectedInstance.ps1 => Get-DbaConnectedInstance.ps1} | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename functions/{Get-ConnectedInstance.ps1 => Get-DbaConnectedInstance.ps1} (77%) diff --git a/functions/Get-ConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 similarity index 77% rename from functions/Get-ConnectedInstance.ps1 rename to functions/Get-DbaConnectedInstance.ps1 index ca47ca7350..fd7b5c9639 100644 --- a/functions/Get-ConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -28,8 +28,9 @@ function Get-DbaConnectedInstance { process { foreach ($key in $script:connectionhash.Keys) { [pscustomobject]@{ - SqlInstance = (Hide-ConnectionString -ConnectionString $key) - Connection = $script:connectionhash[$key] + SqlInstance = [dbainstanceparameter]$key + ConnectionString = (Hide-ConnectionString -ConnectionString $key) + ConnectionObject = $script:connectionhash[$key] } } } From 12919d86a94737abde4eadd0b9ba8e277657f6b2 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 08:41:27 +0200 Subject: [PATCH 07/15] WOO --- functions/Disconnect-DbaInstance.ps1 | 88 ++++++++++++++++++++++++ functions/Get-DbaConnectedInstance.ps1 | 1 + tests/Disconnect-DbaInstance.Tests.ps1 | 27 ++++++++ tests/Get-DbaConnectedInstance.Tests.ps1 | 2 +- 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 functions/Disconnect-DbaInstance.ps1 create mode 100644 tests/Disconnect-DbaInstance.Tests.ps1 diff --git a/functions/Disconnect-DbaInstance.ps1 b/functions/Disconnect-DbaInstance.ps1 new file mode 100644 index 0000000000..a937eca640 --- /dev/null +++ b/functions/Disconnect-DbaInstance.ps1 @@ -0,0 +1,88 @@ +function Disconnect-DbaInstance { + <# + .SYNOPSIS + Disconnects or closes a connected instance + + .DESCRIPTION + Disconnects or closes a connected instance + + .PARAMETER InputObject + The server object to disconnet + + .PARAMETER WhatIf + Shows what would happen if the command were to run. No actions are actually performed. + + .PARAMETER Confirm + Prompts you for confirmation before executing any changing operations within the command. + + .PARAMETER EnableException + By default, when something goes wrong we try to catch it, interpret it and give you a friendly warning message. + This avoids overwhelming you with "sea of red" exceptions, but is inconvenient because it basically disables advanced scripting. + Using this switch turns this "nice by default" feature off and enables you to catch exceptions with your own try/catch. + + .NOTES + Tags: Connection + Author: Chrissy LeMaire (@cl), netnerds.net + + Website: https://dbatools.io + Copyright: (c) 2021 by dbatools, licensed under MIT + License: MIT https://opensource.org/licenses/MIT + + .LINK + https://dbatools.io/Disconnect-DbaInstance + + .EXAMPLE + PS C:\> Get-DbaConnectedInstance | Disconnect-DbaInstance + + Disconnects all connected instances + + .EXAMPLE + PS C:\> $server = Connect-DbaInstance -SqlInstance sql01 + PS C:\> $server | Disconnect-DbaInstance + + Disconnects the $server connection + #> + [CmdletBinding(SupportsShouldProcess, ConfirmImpact = "Low")] + param ( + [parameter(ValueFromPipeline)] + [psobject[]]$InputObject, + [switch]$EnableException + ) + process { + foreach ($object in $InputObject) { + try { + if ($object.ConnectionObject) { + $server = $object.ConnectionObject + } else { + $server = $object + } + if ($server.ConnectionContext) { + if ($Pscmdlet.ShouldProcess($server.Name, "Disconnecting SQL Connection")) { + $server.ConnectionContext.Disconnect() + [pscustomobject]@{ + SqlInstance = [dbainstanceparameter]$server + ConnectionString = (Hide-ConnectionString -ConnectionString $server.ConnectionContext.ConnectionString) + ConnectionType = $server.GetType().FullName + State = "Disconnected" + } | Select-DefaultView -Property SqlInstance, ConnectionType, State + } + } + if ($server.GetType().Name -eq "SqlConnection") { + if ($Pscmdlet.ShouldProcess($server.Name, "Closing SQL Connection")) { + if ($server.State -eq "Open") { + $server.Close() + [pscustomobject]@{ + SqlInstance = [dbainstanceparameter]$server.ConnectionString + ConnectionString = (Hide-ConnectionString -ConnectionString $server.ConnectionString) + ConnectionType = $server.GetType().FullName + State = "Disconnected" + } | Select-DefaultView -Property SqlInstance, ConnectionType, State + } + } + } + } catch { + Stop-Function -Message "Failed to disconnect $object" -ErrorRecord $PSItem -Continue + } + } + } +} \ No newline at end of file diff --git a/functions/Get-DbaConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 index fd7b5c9639..9252971325 100644 --- a/functions/Get-DbaConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -31,6 +31,7 @@ function Get-DbaConnectedInstance { SqlInstance = [dbainstanceparameter]$key ConnectionString = (Hide-ConnectionString -ConnectionString $key) ConnectionObject = $script:connectionhash[$key] + ConnectionType = $script:connectionhash[$key].GetType().FullName } } } diff --git a/tests/Disconnect-DbaInstance.Tests.ps1 b/tests/Disconnect-DbaInstance.Tests.ps1 new file mode 100644 index 0000000000..b2c11c0ce7 --- /dev/null +++ b/tests/Disconnect-DbaInstance.Tests.ps1 @@ -0,0 +1,27 @@ +$CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "") +Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan +. "$PSScriptRoot\constants.ps1" + +Describe "$CommandName Unit Tests" -Tag "UnitTests" { + Context "Validate parameters" { + [array]$params = ([Management.Automation.CommandMetaData]$ExecutionContext.SessionState.InvokeCommand.GetCommand($CommandName, 'Function')).Parameters.Keys + [object[]]$knownParameters = 'InputObject', 'EnableException' + + It "Should only contain our specific parameters" { + Compare-Object -ReferenceObject $knownParameters -DifferenceObject $params | Should -BeNullOrEmpty + } + } +} + +Describe "$commandname Integration Tests" -Tag "IntegrationTests" { + BeforeAll { + $null = Get-DbaDatabase -SqlInstance $script:instance1 + $null = Connect-DbaInstance -SqlInstance $env:COMPUTERNAME -SqlConnectionOnly + } + Context "disconnets a server" { + It "disconnects and returns some results" { + $results = Get-DbaConnectedInstance | Disconnect-DbaInstance + $results.Count | Should -BeGreaterThan 1 + } + } +} \ No newline at end of file diff --git a/tests/Get-DbaConnectedInstance.Tests.ps1 b/tests/Get-DbaConnectedInstance.Tests.ps1 index 2469484f8e..9aa56d4b15 100644 --- a/tests/Get-DbaConnectedInstance.Tests.ps1 +++ b/tests/Get-DbaConnectedInstance.Tests.ps1 @@ -4,7 +4,7 @@ Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan Describe "$commandname Integration Tests" -Tag "IntegrationTests" { BeforeAll { - $db = Get-DbaDatabase -SqlInstance $script:instance1 -Database $dbname + $null = Get-DbaDatabase -SqlInstance $script:instance1 } Context "gets connected objects" { It "returns some results" { From 98a8cbe693a7e2dac1b2bbc5f586c83add393f3f Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 10:01:37 +0200 Subject: [PATCH 08/15] Update Get-DbaConnectedInstance.Tests.ps1 --- tests/Get-DbaConnectedInstance.Tests.ps1 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/Get-DbaConnectedInstance.Tests.ps1 b/tests/Get-DbaConnectedInstance.Tests.ps1 index 9aa56d4b15..fc2792ce85 100644 --- a/tests/Get-DbaConnectedInstance.Tests.ps1 +++ b/tests/Get-DbaConnectedInstance.Tests.ps1 @@ -2,6 +2,15 @@ $CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "") Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan . "$PSScriptRoot\constants.ps1" +Describe "$CommandName Unit Tests" -Tag "UnitTests" { + Context "Validate parameters" { + # fake tests, no parameters to validate + It "Should only contain our specific parameters" { + $null | Should -BeNullOrEmpty + } + } +} + Describe "$commandname Integration Tests" -Tag "IntegrationTests" { BeforeAll { $null = Get-DbaDatabase -SqlInstance $script:instance1 From 2481a922a5ba015212b804b8720bad90d3b29494 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 10:09:39 +0200 Subject: [PATCH 09/15] update docs --- functions/Disconnect-DbaInstance.ps1 | 11 ++++++++--- functions/Get-DbaConnectedInstance.ps1 | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/functions/Disconnect-DbaInstance.ps1 b/functions/Disconnect-DbaInstance.ps1 index a937eca640..a9e0372c1e 100644 --- a/functions/Disconnect-DbaInstance.ps1 +++ b/functions/Disconnect-DbaInstance.ps1 @@ -1,13 +1,13 @@ function Disconnect-DbaInstance { <# .SYNOPSIS - Disconnects or closes a connected instance + Disconnects or closes a connection to a SQL Server instance .DESCRIPTION - Disconnects or closes a connected instance + Disconnects or closes a connection to a SQL Server instance .PARAMETER InputObject - The server object to disconnet + The server object to disconnect .PARAMETER WhatIf Shows what would happen if the command were to run. No actions are actually performed. @@ -36,6 +36,11 @@ function Disconnect-DbaInstance { Disconnects all connected instances + .EXAMPLE + PS C:\> Get-DbaConnectedInstance | Out-GridView -Passthru | Disconnect-DbaInstance + + Disconnects selected SQL Server instances + .EXAMPLE PS C:\> $server = Connect-DbaInstance -SqlInstance sql01 PS C:\> $server | Disconnect-DbaInstance diff --git a/functions/Get-DbaConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 index 9252971325..6a1604ae92 100644 --- a/functions/Get-DbaConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -1,7 +1,7 @@ function Get-DbaConnectedInstance { <# .SYNOPSIS - Get a list of all connected instances. + Get a list of all connected instances .DESCRIPTION Get a list of all connected instances @@ -20,7 +20,7 @@ function Get-DbaConnectedInstance { .EXAMPLE PS C:\> Get-DbaConnectedInstance - Gets all connections + Gets all connected SQL Server instances #> [CmdletBinding()] From ffcb95584abde5cb92aac56030aacc932a466f37 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 10:11:20 +0200 Subject: [PATCH 10/15] update docs --- functions/Disconnect-DbaInstance.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/functions/Disconnect-DbaInstance.ps1 b/functions/Disconnect-DbaInstance.ps1 index a9e0372c1e..feb4afdad8 100644 --- a/functions/Disconnect-DbaInstance.ps1 +++ b/functions/Disconnect-DbaInstance.ps1 @@ -6,8 +6,10 @@ function Disconnect-DbaInstance { .DESCRIPTION Disconnects or closes a connection to a SQL Server instance + To clear all of your connection pools, use Clear-DbaConnectionPool + .PARAMETER InputObject - The server object to disconnect + The server object to disconnect from, usually piped in from Get-DbaConnectedInstance .PARAMETER WhatIf Shows what would happen if the command were to run. No actions are actually performed. From e0b90d2344d1eb916536434962497f93577cef38 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 13:05:03 +0200 Subject: [PATCH 11/15] updates --- functions/Connect-DbaInstance.ps1 | 28 +++----- functions/Disconnect-DbaInstance.ps1 | 66 ++++++++++++------- functions/Get-DbaConnectedInstance.ps1 | 18 +++-- .../functions/Add-ConnectionHashValue.ps1 | 13 ++++ 4 files changed, 78 insertions(+), 47 deletions(-) create mode 100644 internal/functions/Add-ConnectionHashValue.ps1 diff --git a/functions/Connect-DbaInstance.ps1 b/functions/Connect-DbaInstance.ps1 index bcd23f2f2a..8c258a9e07 100644 --- a/functions/Connect-DbaInstance.ps1 +++ b/functions/Connect-DbaInstance.ps1 @@ -283,7 +283,7 @@ function Connect-DbaInstance { PS C:\> $server = Connect-DbaInstance -SqlInstance srv1 -DedicatedAdminConnection PS C:\> $dbaProcess = Get-DbaProcess -SqlInstance $server -ExcludeSystemSpids PS C:\> $killedProcess = $dbaProcess | Out-GridView -OutputMode Multiple | Stop-DbaProcess - PS C:\> $server.ConnectionContext.Disconnect() + PS C:\> $server | Disconnect-DbaInstance Creates a dedicated admin connection (DAC) to the default instance on server srv1. Receives all non-system processes from the instance using the DAC. @@ -963,9 +963,8 @@ function Connect-DbaInstance { } if ($SqlConnectionOnly) { + $null = Add-ConnectionHashValue -Key $server.ConnectionContext.ConnectionString -Value $server.ConnectionContext.SqlConnectionObject Write-Message -Level Debug -Message "We return only SqlConnection in server.ConnectionContext.SqlConnectionObject" - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } @@ -1068,8 +1067,7 @@ function Connect-DbaInstance { } } - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server + $null = Add-ConnectionHashValue -Key $server.ConnectionContext.ConnectionString -Value $server Write-Message -Level Debug -Message "We are finished with this instance" continue } @@ -1240,9 +1238,7 @@ function Connect-DbaInstance { if ($currentdb) { Add-Member -InputObject $server -NotePropertyName Databases -NotePropertyValue @{ $currentdb.Name = $currentdb } -Force }#> - - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server + $null = Add-ConnectionHashValue -Key $server.ConnectionContext.ConnectionString -Value $server $server continue } catch { @@ -1258,8 +1254,7 @@ function Connect-DbaInstance { $instance.InputObject.ConnectionContext.Connect() } if ($SqlConnectionOnly) { - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$instance.InputObject.ConnectionContext.ConnectionString] = $instance.InputObject.ConnectionContext.SqlConnectionObject + $null = Add-ConnectionHashValue -Key $instance.InputObject.ConnectionContext.ConnectionString -Value $instance.InputObject.ConnectionContext.SqlConnectionObject $instance.InputObject.ConnectionContext.SqlConnectionObject continue } else { @@ -1301,9 +1296,9 @@ function Connect-DbaInstance { if ($AzureUnsupported -and $server.DatabaseEngineType -eq "SqlAzureDatabase") { Stop-Function -Target $instance -Message "Azure SQL Database not supported" -Continue } + $null = Add-ConnectionHashValue -Key $server.ConnectionContext.ConnectionString -Value $server.ConnectionContext.SqlConnectionObject + Write-Message -Level Debug -Message "We return server.ConnectionContext.SqlConnectionObject" - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1332,9 +1327,8 @@ function Connect-DbaInstance { if ([Sqlcollaborative.Dbatools.TabExpansion.TabExpansionHost]::Cache["sqlinstance"] -notcontains $instance.FullSmoName.ToLowerInvariant()) { [Sqlcollaborative.Dbatools.TabExpansion.TabExpansionHost]::Cache["sqlinstance"] += $instance.FullSmoName.ToLowerInvariant() } + $null = Add-ConnectionHashValue -Key $server.ConnectionContext.ConnectionString -Value $server Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server $server continue } @@ -1557,9 +1551,8 @@ function Connect-DbaInstance { } if ($SqlConnectionOnly) { + $null = Add-ConnectionHashValue -Key $server.ConnectionContext.ConnectionString -Value $server.ConnectionContext.SqlConnectionObject Write-Message -Level Debug -Message "SqlConnectionOnly, so returning server.ConnectionContext.SqlConnectionObject" - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server.ConnectionContext.SqlConnectionObject $server.ConnectionContext.SqlConnectionObject continue } else { @@ -1603,9 +1596,8 @@ function Connect-DbaInstance { Stop-Function -Target $instance -Message "Azure SQL Database not supported" -Continue } + $null = Add-ConnectionHashValue -Key $server.ConnectionContext.ConnectionString -Value $server Write-Message -Level Debug -Message "We return server with server.Name = '$($server.Name)'" - Write-Message -Level Debug -Message "Adding to connection hash" - $script:connectionhash[$server.ConnectionContext.ConnectionString] = $server $server continue } diff --git a/functions/Disconnect-DbaInstance.ps1 b/functions/Disconnect-DbaInstance.ps1 index feb4afdad8..c0a76d1b60 100644 --- a/functions/Disconnect-DbaInstance.ps1 +++ b/functions/Disconnect-DbaInstance.ps1 @@ -56,39 +56,55 @@ function Disconnect-DbaInstance { [switch]$EnableException ) process { - foreach ($object in $InputObject) { - try { - if ($object.ConnectionObject) { - $server = $object.ConnectionObject - } else { - $server = $object - } - if ($server.ConnectionContext) { - if ($Pscmdlet.ShouldProcess($server.Name, "Disconnecting SQL Connection")) { - $server.ConnectionContext.Disconnect() - [pscustomobject]@{ - SqlInstance = [dbainstanceparameter]$server - ConnectionString = (Hide-ConnectionString -ConnectionString $server.ConnectionContext.ConnectionString) - ConnectionType = $server.GetType().FullName - State = "Disconnected" - } | Select-DefaultView -Property SqlInstance, ConnectionType, State + # to avoid enumeration problems when piped + $objects += $InputObject + } + end { + foreach ($object in $objects) { + if ($object.ConnectionObject) { + $servers = $object.ConnectionObject + } else { + $servers = $object + } + foreach ($server in $servers) { + try { + if ($server.ConnectionContext) { + if ($Pscmdlet.ShouldProcess($server.Name, "Disconnecting SQL Connection")) { + $null = $server.ConnectionContext.Disconnect() + if ($script:connectionhash[$server.ConnectionContext.ConnectionString]) { + Write-Message -Level Verbose -Message "removing from connection hash" + $null = $script:connectionhash.Remove($server.ConnectionContext.ConnectionString) + } + [pscustomobject]@{ + SqlInstance = $server.Name + ConnectionString = (Hide-ConnectionString -ConnectionString $server.ConnectionContext.ConnectionString) + ConnectionType = $server.GetType().FullName + State = "Disconnected" + } | Select-DefaultView -Property SqlInstance, ConnectionType, State + } } - } - if ($server.GetType().Name -eq "SqlConnection") { - if ($Pscmdlet.ShouldProcess($server.Name, "Closing SQL Connection")) { - if ($server.State -eq "Open") { - $server.Close() + if ($server.GetType().Name -eq "SqlConnection") { + if ($Pscmdlet.ShouldProcess($server.DataSource, "Closing SQL Connection")) { + if ($server.State -eq "Open") { + $null = $server.Close() + } + + if ($script:connectionhash[$server.ConnectionString]) { + Write-Message -Level Verbose -Message "removing from connection hash" + $null = $script:connectionhash.Remove($server.ConnectionString) + } + [pscustomobject]@{ - SqlInstance = [dbainstanceparameter]$server.ConnectionString + SqlInstance = $server.DataSource ConnectionString = (Hide-ConnectionString -ConnectionString $server.ConnectionString) ConnectionType = $server.GetType().FullName - State = "Disconnected" + State = $server.State } | Select-DefaultView -Property SqlInstance, ConnectionType, State } } + } catch { + Stop-Function -Message "Failed to disconnect $object" -ErrorRecord $PSItem -Continue } - } catch { - Stop-Function -Message "Failed to disconnect $object" -ErrorRecord $PSItem -Continue } } } diff --git a/functions/Get-DbaConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 index 6a1604ae92..c4bbe3dc79 100644 --- a/functions/Get-DbaConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -22,17 +22,27 @@ function Get-DbaConnectedInstance { Gets all connected SQL Server instances + .EXAMPLE + PS C:\> Get-DbaConnectedInstance | Select * + + Gets all connected SQL Server instances and shows the associated connectionstrings as well + #> [CmdletBinding()] param () process { foreach ($key in $script:connectionhash.Keys) { + if ($script:connectionhash[$key].DataSource) { + $instance = $script:connectionhash[$key] | Select-Object -First 1 -ExpandProperty DataSource + } else { + $instance = $script:connectionhash[$key] | Select-Object -First 1 -ExpandProperty Name + } [pscustomobject]@{ - SqlInstance = [dbainstanceparameter]$key - ConnectionString = (Hide-ConnectionString -ConnectionString $key) + SqlInstance = $instance ConnectionObject = $script:connectionhash[$key] - ConnectionType = $script:connectionhash[$key].GetType().FullName - } + ConnectionType = $script:connectionhash[$key][0].GetType().FullName + ConnectionString = (Hide-ConnectionString -ConnectionString $key) + } | Select-DefaultView -Property SqlInstance, ConnectionObject, ConnectionType } } } \ No newline at end of file diff --git a/internal/functions/Add-ConnectionHashValue.ps1 b/internal/functions/Add-ConnectionHashValue.ps1 new file mode 100644 index 0000000000..5dd69a8ad7 --- /dev/null +++ b/internal/functions/Add-ConnectionHashValue.ps1 @@ -0,0 +1,13 @@ +function Add-ConnectionHashValue { + param( + [Parameter(Mandatory)] + $Key, + [Parameter(Mandatory)] + $Value + ) + Write-Message -Level Debug -Message "Adding to connection hash" + if (-not $script:connectionhash[$Key]) { + $script:connectionhash[$Key] = @( ) + } + $script:connectionhash[$Key] += $Value +} \ No newline at end of file From 183aa3fa26c3bce2b69fa1aa54bdf9f9ddbc4b24 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 13:29:51 +0200 Subject: [PATCH 12/15] remove dupes --- functions/Get-DbaConnectedInstance.ps1 | 2 +- internal/functions/Add-ConnectionHashValue.ps1 | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/functions/Get-DbaConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 index c4bbe3dc79..5c54da8890 100644 --- a/functions/Get-DbaConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -42,7 +42,7 @@ function Get-DbaConnectedInstance { ConnectionObject = $script:connectionhash[$key] ConnectionType = $script:connectionhash[$key][0].GetType().FullName ConnectionString = (Hide-ConnectionString -ConnectionString $key) - } | Select-DefaultView -Property SqlInstance, ConnectionObject, ConnectionType + } | Select-DefaultView -Property SqlInstance, ConnectionType, ConnectionObject } } } \ No newline at end of file diff --git a/internal/functions/Add-ConnectionHashValue.ps1 b/internal/functions/Add-ConnectionHashValue.ps1 index 5dd69a8ad7..601230dbca 100644 --- a/internal/functions/Add-ConnectionHashValue.ps1 +++ b/internal/functions/Add-ConnectionHashValue.ps1 @@ -6,8 +6,13 @@ function Add-ConnectionHashValue { $Value ) Write-Message -Level Debug -Message "Adding to connection hash" - if (-not $script:connectionhash[$Key]) { - $script:connectionhash[$Key] = @( ) + + if ($Value.ConnectionContext.NonPooledConnection -or $Value.NonPooledConnection) { + if (-not $script:connectionhash[$Key]) { + $script:connectionhash[$Key] = @( ) + } + $script:connectionhash[$Key] += $Value + } else { + $script:connectionhash[$Key] = $Value } - $script:connectionhash[$Key] += $Value } \ No newline at end of file From d32ff49275f576914b96c290d2c7a87821247d32 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 13:36:41 +0200 Subject: [PATCH 13/15] aww yeahhh --- functions/Get-DbaConnectedInstance.ps1 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/functions/Get-DbaConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 index 5c54da8890..86329dac75 100644 --- a/functions/Get-DbaConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -37,12 +37,22 @@ function Get-DbaConnectedInstance { } else { $instance = $script:connectionhash[$key] | Select-Object -First 1 -ExpandProperty Name } + $value = $script:connectionhash[$key][0] + if (-not $value) { + $script:connectionhash[$key] + } + if ($value.ConnectionContext.NonPooledConnection -or $value.NonPooledConnection) { + $pooling = $false + } else { + $pooling = $true + } [pscustomobject]@{ SqlInstance = $instance ConnectionObject = $script:connectionhash[$key] ConnectionType = $script:connectionhash[$key][0].GetType().FullName + Pooled = $pooling ConnectionString = (Hide-ConnectionString -ConnectionString $key) - } | Select-DefaultView -Property SqlInstance, ConnectionType, ConnectionObject + } | Select-DefaultView -Property SqlInstance, ConnectionType, ConnectionObject, Pooled } } } \ No newline at end of file From fee2fea09a1bea5f86e7477251c5a28f7d1ac997 Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 13:37:37 +0200 Subject: [PATCH 14/15] lil prettier --- functions/Get-DbaConnectedInstance.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/Get-DbaConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 index 86329dac75..0c3d19951e 100644 --- a/functions/Get-DbaConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -49,7 +49,7 @@ function Get-DbaConnectedInstance { [pscustomobject]@{ SqlInstance = $instance ConnectionObject = $script:connectionhash[$key] - ConnectionType = $script:connectionhash[$key][0].GetType().FullName + ConnectionType = $value.GetType().FullName Pooled = $pooling ConnectionString = (Hide-ConnectionString -ConnectionString $key) } | Select-DefaultView -Property SqlInstance, ConnectionType, ConnectionObject, Pooled From ab87ae7afe899e8a559113c133f291bb81d90dec Mon Sep 17 00:00:00 2001 From: Chrissy LeMaire Date: Fri, 30 Jul 2021 13:38:22 +0200 Subject: [PATCH 15/15] pretty --- functions/Get-DbaConnectedInstance.ps1 | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/functions/Get-DbaConnectedInstance.ps1 b/functions/Get-DbaConnectedInstance.ps1 index 0c3d19951e..d0318908bd 100644 --- a/functions/Get-DbaConnectedInstance.ps1 +++ b/functions/Get-DbaConnectedInstance.ps1 @@ -37,10 +37,7 @@ function Get-DbaConnectedInstance { } else { $instance = $script:connectionhash[$key] | Select-Object -First 1 -ExpandProperty Name } - $value = $script:connectionhash[$key][0] - if (-not $value) { - $script:connectionhash[$key] - } + $value = $script:connectionhash[$key] | Select-Object -First 1 if ($value.ConnectionContext.NonPooledConnection -or $value.NonPooledConnection) { $pooling = $false } else {