运行空间问题使用来自 Powershell 的异步 API

Runspace issus using async APIs from Powershell

我正在 Powershell 中调用一个库,它使用 .NET HttpClient 发出 POST 请求。客户端在后台线程上调用 运行s。它适用于 HTTP。然而,当我使用 HTTPS 时,我 运行 遇到了问题。服务器未使用有效的签名证书。我使用以下方法正确禁用了该检查:

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

仅会遇到与 运行空格相关的错误:

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.Runspace type. The script block you attempted to invoke was: $true

根据一些研究,它似乎与 API 是异步/使用任务这一事实有关。

如有任何帮助,我们将不胜感激。

尝试改用证书策略?

add-type @" 
    using System.Net; 
    using System.Security.Cryptography.X509Certificates; 

    public class NoSSLCheckPolicy : ICertificatePolicy { 
        public NoSSLCheckPolicy() {} 
        public bool CheckValidationResult( 
            ServicePoint sPoint, X509Certificate cert, 
            WebRequest wRequest, int certProb) { 
            return true; 
        } 
    } 
"@ 
[System.Net.ServicePointManager]::CertificatePolicy = new-object NoSSLCheckPolicy 

请注意,当您关闭验证时,您将关闭所有内容——我会比@Trondh 的建议更仔细地编写一个验证器——不要只是 return是的,确保证书至少有效(即使是自签名的),并且只允许特定域的自签名证书。

FWIW,我在 Splunk 工作时为 .Net 编写了一个 Tuneable SSL Validator 来处理 Splunk 默认使用自签名证书的事实。它有一个 PowerShell 模块,其中包含让您信任会话证书的命令,​​或者只是禁用证书链验证(因此您可以信任没有证书链的有效自签名证书)......并且它有包装 Invoke-WebRequestInvoke-RestMethod 甚至 Export-ODataEndpointProxy 添加一个 Insecure 开关,这样你就可以为单个请求禁用 SSL。

https://github.com/Jaykul/Tunable-SSL-Validator