Skip to content

Commit 2acbae5

Browse files
New-DbaFirewallRule - Fix binary path extraction and remove dead code
- Replace unsafe -replace regex (returns original string on no match, so a non-matching BinaryPath would silently produce a wrong Program path) with -match + $Matches[1] for both sqlservr.exe and sqlbrowser.exe detection - Remove unused \$programNeeded variable (was set but never read) (do New-DbaFirewallRule) Co-authored-by: Andreas Jordan <andreasjordan@users.noreply.github.com>
1 parent 97d03be commit 2acbae5

1 file changed

Lines changed: 6 additions & 11 deletions

File tree

public/New-DbaFirewallRule.ps1

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,6 @@ function New-DbaFirewallRule {
266266
process {
267267
foreach ($instance in $SqlInstance) {
268268
$rules = @( )
269-
$programNeeded = $false
270269
$browserNeeded = $false
271270
if ($PSBoundParameters.Type) {
272271
$browserOptional = $false
@@ -318,17 +317,14 @@ function New-DbaFirewallRule {
318317
# Try to get the program path for executable-based rule
319318
try {
320319
$service = Get-DbaService -ComputerName $instance.ComputerName -InstanceName $instance.InstanceName -Credential $Credential -Type Engine -EnableException
321-
$programPath = $service.BinaryPath -replace '^"?(.*sqlservr.exe).*$', '$1'
322-
if ($programPath) {
323-
$rule.Config.Program = $programPath
324-
Write-Message -Level Verbose -Message "Creating program-based firewall rule targeting: $programPath"
320+
if ($service.BinaryPath -match '^"?(.+sqlservr\.exe)') {
321+
$rule.Config.Program = $Matches[1]
322+
Write-Message -Level Verbose -Message "Creating program-based firewall rule targeting: $($Matches[1])"
325323
} else {
326324
Write-Message -Level Warning -Message "Could not determine executable path for instance $instance. Falling back to port-based rule."
327-
$programNeeded = $false
328325
}
329326
} catch {
330327
Write-Message -Level Warning -Message "Failed to get service information for instance $instance. Falling back to port-based rule."
331-
$programNeeded = $false
332328
}
333329

334330
# If we couldn't get the program path, fall back to port-based rule
@@ -380,11 +376,10 @@ function New-DbaFirewallRule {
380376
# Try to get the SQL Browser service executable path
381377
try {
382378
$browserService = Get-DbaService -ComputerName $instance.ComputerName -Credential $Credential -Type Browser -EnableException | Select-Object -First 1
383-
$browserPath = $browserService.BinaryPath -replace '^"?(.*sqlbrowser.exe).*$', '$1'
384-
if ($browserPath) {
385-
$rule.Config.Program = $browserPath
379+
if ($browserService.BinaryPath -match '^"?(.+sqlbrowser\.exe)') {
380+
$rule.Config.Program = $Matches[1]
386381
$rule.Config.Protocol = 'Any'
387-
Write-Message -Level Verbose -Message "Creating program-based firewall rule for Browser targeting: $browserPath"
382+
Write-Message -Level Verbose -Message "Creating program-based firewall rule for Browser targeting: $($Matches[1])"
388383
} else {
389384
Write-Message -Level Warning -Message "Could not determine SQL Browser executable path. Falling back to port-based rule."
390385
$rule.Config.LocalPort = '1434'

0 commit comments

Comments
 (0)