繁体   English   中英

使用Powershell中的异步API运行空间issus

[英]Runspace issus using async APIs from Powershell

我正在调用Powershell中的库,该库使用.NET HttpClient发出POST请求。 客户端调用在后台线程上运行。 它适用于HTTP。 但是,当我使用HTTPS时,会遇到问题。 服务器未使用有效的签名证书。 我使用以下命令禁用了该检查功能:

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

仅由与运行空间相关的此错误满足:

System.Management.Automation.PSInvalidOperationException:此线程中没有可用于运行脚本的运行空间。 您可以在System.Management.Automation.Runspaces.Runspace类型的DefaultRunspace属性中提供一个。 您尝试调用的脚本块是:$ 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的建议更仔细地编写验证器-不要只返回true,请确保证书至少有效(即使是自签名的),并且仅允许特定域的自签名证书。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM