Powershell v5.1 Invoke-RestMethod和旁路代理

时间:2018-11-24 23:41:34

标签: powershell proxy powershell-v6.0 powershell-v5.1

我目前在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中有任何解决方法吗?

谢谢, 菲利普

4 个答案:

答案 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进行以下操作:

Update-Proxy.ps1

根据此常见问题解答

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

在我的情况下效果很好!