From d2600cb2f38d188f44fff2f4c47aa87bb7308b11 Mon Sep 17 00:00:00 2001 From: yoke88 Date: Wed, 1 Jul 2020 10:43:43 +0800 Subject: [PATCH 1/5] update Resolve-IpAddress Microsoft.SqlServer.Management.Smo.Server object may return null computername , we need resolve such situation --- internal/functions/Resolve-IpAddress.ps1 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/functions/Resolve-IpAddress.ps1 b/internal/functions/Resolve-IpAddress.ps1 index 319001be2a7f..135e3708fd81 100644 --- a/internal/functions/Resolve-IpAddress.ps1 +++ b/internal/functions/Resolve-IpAddress.ps1 @@ -8,9 +8,15 @@ function Resolve-IpAddress { ) $ping = New-Object System.Net.NetworkInformation.Ping $timeout = 1000 #milliseconds + $destComputer=$null if ($Server.GetType() -eq [Microsoft.SqlServer.Management.Smo.Server]) { - return $ping.Send($Server.ComputerName, $timeout).Address.IPAddressToString + if($server.computername){ + $destComputer=$server.Computername + }elseif($server.name){ + $destComputer=$server.name + } } else { - return $ping.Send($server.Split('\')[0], $timeout).Address.IPAddressToString + $destComputer=$server.Split('\')[0] } -} \ No newline at end of file + return $ping.Send($destComputer, $timeout).Address.IPAddressToString +} From fb254e5a861017566994ff1e55c88c72cf7296b0 Mon Sep 17 00:00:00 2001 From: yoke88 Date: Wed, 1 Jul 2020 11:33:45 +0800 Subject: [PATCH 2/5] Update Resolve-NetBiosName.ps1 resolve issue #6632 --- internal/functions/Resolve-NetBiosName.ps1 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/functions/Resolve-NetBiosName.ps1 b/internal/functions/Resolve-NetBiosName.ps1 index 160f79c8ec3e..a405db21d27d 100644 --- a/internal/functions/Resolve-NetBiosName.ps1 +++ b/internal/functions/Resolve-NetBiosName.ps1 @@ -10,5 +10,9 @@ Internal function. Takes a best guess at the NetBIOS name of a server. [PSCredential]$SqlCredential ) $server = Connect-SqlInstance -SqlInstance $SqlInstance -SqlCredential $SqlCredential - $server.ComputerName -} \ No newline at end of file + if($server.ComputerName){ + return $server.ComputerName + }else{ + return $server.name + } +} From 7c406617f3f0dc701fe2bb3ba7366eb98e727b32 Mon Sep 17 00:00:00 2001 From: yoke88 Date: Wed, 1 Jul 2020 21:04:54 +0800 Subject: [PATCH 3/5] Update Get-DecryptedObject.ps1 using datalength to replace len, which will works on sql 2012,2014,2016 --- internal/functions/Get-DecryptedObject.ps1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/functions/Get-DecryptedObject.ps1 b/internal/functions/Get-DecryptedObject.ps1 index fe09b522e4e1..cd5a20e602fa 100644 --- a/internal/functions/Get-DecryptedObject.ps1 +++ b/internal/functions/Get-DecryptedObject.ps1 @@ -22,7 +22,7 @@ function Get-DecryptedObject { # Query Service Master Key from the database - remove padding from the key # key_id 102 eq service master key, thumbprint 3 means encrypted with machinekey Write-Message -Level Verbose -Message "Querying service master key" - $sql = "SELECT substring(crypt_property,9,len(crypt_property)-8) as smk FROM sys.key_encryptions WHERE key_id=102 and (thumbprint=0x03 or thumbprint=0x0300000001)" + $sql = "SELECT substring(crypt_property,9,datalength(crypt_property)-8) as smk FROM sys.key_encryptions WHERE key_id=102 and (thumbprint=0x03 or thumbprint=0x0300000001)" try { $smkbytes = $server.Query($sql).smk } catch { @@ -115,14 +115,14 @@ function Get-DecryptedObject { syslnklgns.name, substring(syslnklgns.pwdhash,5,$ivlen) iv, substring(syslnklgns.pwdhash,$($ivlen + 5), - len(syslnklgns.pwdhash)-$($ivlen + 4)) pass + datalength(syslnklgns.pwdhash)-$($ivlen + 4)) pass FROM master.sys.syslnklgns inner join master.sys.sysservers on syslnklgns.srvid=sysservers.srvid - WHERE len(pwdhash) > 0" + WHERE datalength(pwdhash) > 0" } "Credential" { - "SELECT QUOTENAME(name) AS name,credential_identity,substring(imageval,5,$ivlen) iv, substring(imageval,$($ivlen + 5),len(imageval)-$($ivlen + 4)) pass from sys.credentials cred inner join sys.sysobjvalues obj on cred.credential_id = obj.objid where valclass=28 and valnum=2" + "SELECT QUOTENAME(name) AS name,credential_identity,substring(imageval,5,$ivlen) iv, substring(imageval,$($ivlen + 5),datalength(imageval)-$($ivlen + 4)) pass from sys.credentials cred inner join sys.sysobjvalues obj on cred.credential_id = obj.objid where valclass=28 and valnum=2" } } @@ -199,4 +199,4 @@ function Get-DecryptedObject { Password = $encode.GetString($decrypted) } } -} \ No newline at end of file +} From b603816c2ef411a7a0044912498c0bc9ec3974fe Mon Sep 17 00:00:00 2001 From: yoke88 Date: Wed, 1 Jul 2020 21:07:20 +0800 Subject: [PATCH 4/5] Update Resolve-NetBiosName.ps1 handle null computername --- internal/functions/Resolve-NetBiosName.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/functions/Resolve-NetBiosName.ps1 b/internal/functions/Resolve-NetBiosName.ps1 index a405db21d27d..80e620371c11 100644 --- a/internal/functions/Resolve-NetBiosName.ps1 +++ b/internal/functions/Resolve-NetBiosName.ps1 @@ -12,6 +12,8 @@ Internal function. Takes a best guess at the NetBIOS name of a server. $server = Connect-SqlInstance -SqlInstance $SqlInstance -SqlCredential $SqlCredential if($server.ComputerName){ return $server.ComputerName + }elseif($server.ComputerNamePhysicalNetBIOS){ + return $server.ComputerNamePhysicalNetBIOS }else{ return $server.name } From b15565396ceb4afc8b8a365fa7d42a6998757309 Mon Sep 17 00:00:00 2001 From: yoke88 Date: Wed, 1 Jul 2020 21:10:24 +0800 Subject: [PATCH 5/5] Update Resolve-IpAddress.ps1 handle null computername --- internal/functions/Resolve-IpAddress.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/functions/Resolve-IpAddress.ps1 b/internal/functions/Resolve-IpAddress.ps1 index 135e3708fd81..36da513ca5f3 100644 --- a/internal/functions/Resolve-IpAddress.ps1 +++ b/internal/functions/Resolve-IpAddress.ps1 @@ -12,6 +12,8 @@ function Resolve-IpAddress { if ($Server.GetType() -eq [Microsoft.SqlServer.Management.Smo.Server]) { if($server.computername){ $destComputer=$server.Computername + }elseif($server.ComputerNamePhysicalNetBIOS){ + $destComputer=$server.ComputerNamePhysicalNetBIOS }elseif($server.name){ $destComputer=$server.name }