9

在 PowerShell 2.0 下,我知道您可以通过执行以下操作来设置要使用的代理,而无需知道确切的代理设置:

$proxy = [System.Net.WebRequest]::GetSystemWebproxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

现在,我的问题是,如果我不知道代理设置,我可以使用上述设置并将其与 PowerShell 3.0 结合使用Invoke-WebRequest。这是我希望能够做到的:

$proxy = [System.Net.WebRequest]::GetSystemWebproxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

$WS.Proxy = $proxy

$login = Invoke-WebRequest https://website.com/login_form.html -SessionVariable WS

但是,当我尝试这样做时,我收到一个错误(显然来自我的公司代理),表明我的凭据无法验证。我希望这最终会奏效,但也许我只是犯了一个简单的错误。

4

3 回答 3

15

也许这会有所帮助,我将其保存在我的个人资料中。它使用新的$PSDefaultParameterValues首选项变量来设置新 Web cmdlet 的默认代理值。该代码检测我是否在我的办公环境中并相应地设置设置。这样可以节省我每次使用这些命令时指定设置的时间。

if(Test-Connection myCorpProxy -Count 1 -Quiet)
{
    $global:PSDefaultParameterValues = @{
        'Invoke-RestMethod:Proxy'='http://myCorpProxy:8080'
        'Invoke-WebRequest:Proxy'='http://myCorpProxy:8080'
        '*:ProxyUseDefaultCredentials'=$true
    }
}
于 2013-03-26T20:02:06.527 回答
13

使用可以使用此代码:

$dest = "http://www.google.fr"
$proxyurl = ([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy($dest)
Invoke-WebRequest $dest -Proxy $proxyurl -ProxyUseDefaultCredentials
于 2017-10-27T14:38:21.893 回答
0

上面代码的实际问题(即使 Shay 更优雅)是您试图在变量存在之前对其设置属性。SessionVariable "$WS" 在您调用 Invoke-WebRequest 之前不存在,但您尝试在其上方设置 .Proxy 属性。

如果它在某一时刻有效,您可能之前已经创建了一个 $WS 实例,因此能够在测试期间使用该对象,但是在脚本自顶向下处理时进行全新/空运行时,它还不存在.

于 2016-12-30T18:51:42.333 回答