From db073bda125591cdb6d7c58897798080c821e800 Mon Sep 17 00:00:00 2001 From: JC-ODOT <86445067+jc-odot@users.noreply.github.com> Date: Mon, 13 Mar 2023 14:27:37 -0700 Subject: [PATCH] Updated appcmdontargetmachines.ps1 This resolves an issue with Add-SslCert and Windows 2022. the `netsh` command on 2022 has a different number of lines being output, which results in checks for existing certificate or bindings to fail. --- .../AppCmdOnTargetMachines.ps1 | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/TaskModules/powershell/TaskModuleIISManageUtility/AppCmdOnTargetMachines.ps1 b/TaskModules/powershell/TaskModuleIISManageUtility/AppCmdOnTargetMachines.ps1 index 27e173cf8..82bc675d3 100644 --- a/TaskModules/powershell/TaskModuleIISManageUtility/AppCmdOnTargetMachines.ps1 +++ b/TaskModules/powershell/TaskModuleIISManageUtility/AppCmdOnTargetMachines.ps1 @@ -182,8 +182,8 @@ function Add-SslCert $showCertCmd = [string]::Format("http show sslcert hostnameport={0}:{1}", $hostname, $port) Write-Verbose "Checking if SslCert binding is already present. Running command : netsh $showCertCmd" - $result = Invoke-VstsTool -Filename "netsh" -Arguments $showCertCmd - $isItSameBinding = $result.Get(4).Contains([string]::Format("{0}:{1}", $hostname, $port)) + $result = Invoke-VstsTool -Filename "netsh" -Arguments $showCertCmd + $isItSameBinding = ([regex]::Matches($result,[string]::Format("{0}:{1}", $hostname, $port))).Success $addCertCmd = [string]::Format("http add sslcert hostnameport={0}:{1} certhash={2} appid={{{3}}} certstorename=MY", $hostname, $port, $certhash, [System.Guid]::NewGuid().toString()) } @@ -193,17 +193,21 @@ function Add-SslCert Write-Verbose "Checking if SslCert binding is already present. Running command : netsh $showCertCmd" $result = Invoke-VstsTool -Filename "netsh" -Arguments $showCertCmd - $isItSameBinding = $result.Get(4).Contains([string]::Format("{0}:{1}", $ipAddress, $port)) + $isItSameBinding = ([regex]::Matches($result,[string]::Format("{0}:{1}", $ipAddress, $port))).Success $addCertCmd = [string]::Format("http add sslcert ipport={0}:{1} certhash={2} appid={{{3}}} certstorename=MY", $ipAddress, $port, $certhash, [System.Guid]::NewGuid().toString()) } - $isItSameCert = $result.Get(5).ToLower().Contains($certhash.ToLower()) + $isItSameCert = ([regex]::Matches($result.ToLower(),$certhash.ToLower())).Success if($isItSameBinding -and $isItSameCert) { Write-Verbose "SSL cert binding is already present. Returning" return + } + else + { + Write-Verbose "SSL cert binding does not exist. Adding" } Write-Verbose "Setting SslCert for website." @@ -866,4 +870,4 @@ function Invoke-Main Invoke-AdditionalCommand -additionalCommands $AppCmdCommands Write-Verbose "Exiting Execute-Main function" -} \ No newline at end of file +}