我目前在Powershell V5.1中,并且想通过Invoke-RestMethod命令绕过Internet Explorer代理。
在Powershell V6中,有-NoProxy选项,该选项指示cmdlet将不使用代理来到达目标。 这是为了绕过Internet Explorer中配置的代理,这正是我想要做的。
在Powershell V6中,代码类似于:
$pinnedItems = array_filter($my_array, function($obj) {
return $obj->pinned === 1;
});
if (count($pinnedItems) > 0) {
// do something
}
V5.1中有任何解决方法吗?
谢谢, 菲利普
答案 0 :(得分:2)
我知道这已经很老了,但是因为我也喜欢有好的解决方案,所以我会将我的解决方案发布到此线程中。 我实际上使用了它并且它工作得很好(也适用于 Invoke-WebRequest):
$Proxy=New-object System.Net.WebProxy
$WebSession=new-object Microsoft.PowerShell.Commands.WebRequestSession
$WebSession.Proxy=$Proxy
$Antwort=Invoke-RestMethod -Method Post -Uri "https://thisismyrestsite" -Body $BodyJson -WebSession $WebSession
也许这对其他人有帮助,因为到目前为止我还没有在网上找到好的解决方案。如果有人需要特殊的代理设置,我相信他也可以用值填充 $Proxy,这可能允许比 Invoke-RestMethod 或 Invoke-WebRequest 更多的设置。
答案 1 :(得分:1)
在PSCore Web cmdlet中,由于这是一些改进,因此不是本机的,MS表示不会进行任何反向移植。您可以直接从PS5x插入PSCore以使用cmdlet。
使用此功能可以对Invoke-WebRequest进行以下操作:
根据此常见问题解答
Invoke-WebRequest Proxy Bypass
$p = proxy
$p.Override += "*.domain.com"
$p | proxy
Invoke-WebRequest ...
#you could return old override here.
因此,它可能可以与Invoke-RestMethod一起使用,但我无法进行测试。
答案 2 :(得分:1)
作为替代方案,但我认为postanote有一个很好的答案。进入.net怎么样?并且比目前的典型水平要高,所以不要使用WebRequest使用.net的HttpClient:
$request = [System.Net.WebRequest]::Create("https://www.example.org")
$request.Proxy = [System.Net.WebProxy]::new() #blank proxy
$response = $request.GetResponse()
$response
如果绕过代理,我还没有进行广泛的测试(我的公司政策会使其难以测试),但是这个C#问题表明它应该这样做:How to remove proxy from WebRequest and leave DefaultWebProxy untouched
您当然可以在PowerShell中放一些流水线魔术,但是您可以轻松地包装它,如果在重负载下使用套接字,请小心套接字的使用。
答案 3 :(得分:0)
因此,这是我非常成功实施的解决方法:
查询的网站通常会忽略Web请求的结尾(请进行测试,但通常是这样)。因此,我在URL的末尾添加了一些随机的东西:一个时间戳记。
代理每次都认为这是一个新查询,因此不会发生缓存。
$timestamp = (Get-Date -Date ((Get-Date).ToUniversalTime()) -UFormat %s)
$url = "https://www.example.org/$timestamp"
$Result = Invoke-RestMethod -Uri $url
在我的情况下效果很好!