Powershell 3.0 Invoke-WebRequest HTTPS Échoue sur Toutes les Demandes

Je suis en train de travailler avec nos répartiteur de Charge via Powershell 3.0 et une API REST. Cependant, je suis actuellement un échec, peu importe ce que j'essaie si c'est une requête https, que ce soit à notre programme d'équilibrage de charge ou de tout autre site en https. J'ai l'impression de rater quelque chose d'évident.

Voici le code qui échoue avec https

try
{
    #fails
    #$location='https://www.bing.com'
    #fails
    #$location='https://www.google.com'
    #fails
    #$location='https://www.facebook.com'
    #fails
    #$location='https://www.ebay.com'
    #works
    #$location='http://www.bing.com'
    #works
    #$location='http://www.google.com'
    #fails (looks like Facebook does a redirect to https://)
    $location='http://www.facebook.com'
    #works
    #$location='http://www.ebay.com'
    $response=''
    $response = Invoke-WebRequest -URI $location
    $response.StatusCode
    $response.Headers
}
catch
{
    Write-Host StatusCode $response.StatusCode
    Write-Host $_.Exception
}

L'erreur que j'obtiens est:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.Management.Automation.PSInvalidOperationException: 
There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspa
ce type. The script block you attempted to invoke was: $true
   at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
   at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request)
   at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()

J'espérais cette page et les suggestions vers le bas, y compris celui d'Aaron D.) serait de faire une différence, mais aucun d'entre eux fait une différence.

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

et

function Ignore-SSLCertificates
{
    $Provider = New-Object Microsoft.CSharp.CSharpCodeProvider
    $Compiler = $Provider.CreateCompiler()
    $Params = New-Object System.CodeDom.Compiler.CompilerParameters
    $Params.GenerateExecutable = $false
    $Params.GenerateInMemory = $true
    $Params.IncludeDebugInformation = $false
    $Params.ReferencedAssemblies.Add("System.DLL") > $null
    $TASource=@'
    namespace Local.ToolkitExtensions.Net.CertificatePolicy
    {
        public class TrustAll : System.Net.ICertificatePolicy
        {
            public bool CheckValidationResult(System.Net.ServicePoint sp,System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Net.WebRequest req, int problem)
            {
                return true;
            }
        }
    }
'@ 
    $TAResults=$Provider.CompileAssemblyFromSource($Params,$TASource)
    $TAAssembly=$TAResults.CompiledAssembly
    ## We create an instance of TrustAll and attach it to the ServicePointManager
    $TrustAll = $TAAssembly.CreateInstance("Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll")
    [System.Net.ServicePointManager]::CertificatePolicy = $TrustAll
}

et

add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

J'ai essayé de commutation à Invoquer-RestCommand mais en vain je reçois la même réponse.

Il se sent comme ce doit être quelque chose pour l'environnement, parce que je ne peux pas croire que le ci-dessus ne fonctionne pas pour quelqu'un d'autre, mais je l'ai essayé sur un poste de travail et sur un serveur avec les mêmes résultats (n'exclut pas de environnement complètement, mais je sais qu'ils ont été mis en place différemment).

Toutes les pensées?

OK, donc il semble être quelque chose d'un problème de configuration. Cette Invoke-RestMethod -Uri "https://gdata.youtube.com/feeds/api/videos?v=2&q=PowerShell" fonctionne sur Windows Server 2012 avec un PSVersion de 3 0 -1 -1 Ne fonctionne pas sur Windows Server 2008 R2 avec un PS en Version 3 0 -1 -1 Et aussi ne fonctionne pas sur Windows 8.1 avec une version de 4 0 -1 -1

OriginalL'auteur mapeterson42 | 2014-08-05