param ( [Parameter(Mandatory = $true)] [string] $Node, [Parameter(Mandatory = $true)] [string] $SessionId, [Parameter(Mandatory = $true)] [string] $FQDN ) function GetDirectUrlFromIp ($ip) { $ip_dash=$ip -replace "\.","-" $url="https://ip${ip_dash}-${SessionId}.direct.${FQDN}" return $url } function WaitForUrl ($url) { write-host $url do { try{ invoke-webrequest -UseBasicParsing -uri $url | Out-Null } catch {} $status = $? sleep 1 } until($status) } function GetNodeRoutableIp ($nodeName) { $JQFilter='.instances[] | select (.hostname == \"{0}\") | .routable_ip' -f $nodeName $rip = (invoke-webrequest -UseBasicParsing -uri "https://$FQDN/sessions/$SessionId").Content | jq -r $JQFilter IF([string]::IsNullOrEmpty($rip)) { Write-Host "Could not fetch IP for node $nodeName" exit 1 } return $rip } function Set-UseUnsafeHeaderParsing { param( [Parameter(Mandatory,ParameterSetName='Enable')] [switch]$Enable, [Parameter(Mandatory,ParameterSetName='Disable')] [switch]$Disable ) $ShouldEnable = $PSCmdlet.ParameterSetName -eq 'Enable' $netAssembly = [Reflection.Assembly]::GetAssembly([System.Net.Configuration.SettingsSection]) if($netAssembly) { $bindingFlags = [Reflection.BindingFlags] 'Static,GetProperty,NonPublic' $settingsType = $netAssembly.GetType('System.Net.Configuration.SettingsSectionInternal') $instance = $settingsType.InvokeMember('Section', $bindingFlags, $null, $null, @()) if($instance) { $bindingFlags = 'NonPublic','Instance' $useUnsafeHeaderParsingField = $settingsType.GetField('useUnsafeHeaderParsing', $bindingFlags) if($useUnsafeHeaderParsingField) { $useUnsafeHeaderParsingField.SetValue($instance, $ShouldEnable) } } } } $ProgressPreference = 'SilentlyContinue' $ErrorActionPreference = 'Stop' Set-UseUnsafeHeaderParsing -Enable Start-Transcript -path ("C:\{0}.log" -f $MyInvocation.MyCommand.Name) -append add-type @" using System.Net; using System.Security.Cryptography.X509Certificates; public class IDontCarePolicy : ICertificatePolicy { public IDontCarePolicy() {} public bool CheckValidationResult( ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb) { return true; } } "@ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 [System.Net.ServicePointManager]::CertificatePolicy = new-object IDontCarePolicy $dtr_ip = GetNodeRoutableIp $Node $dtr_url = GetDirectUrlFromIp $dtr_ip $dtr_hostname = $dtr_url -replace "https://","" WaitForUrl "${dtr_url}/ca" invoke-webrequest -UseBasicParsing -uri "$dtr_url/ca" -o c:\ca.crt $cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2 c:\ca.crt $store = new-object System.Security.Cryptography.X509Certificates.X509Store('Root','localmachine') $store.Open('ReadWrite') $store.Add($cert) $store.Close() Stop-Transcript