[英]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-WebRequest
和Invoke-RestMethod
甚至Export-ODataEndpointProxy
添加一个Insecure
开关,因此您可以仅对单个请求禁用SSL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.