Invoke-WebRequest GetSystemWebProxy()

时间:2013-03-26 19:46:29

标签: powershell powershell-v3.0

在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

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

3 个答案:

答案 0 :(得分:12)

也许这可以提供帮助,我将其保留在我的个人资料中。它使用新的$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
    }
}

答案 1 :(得分:6)

使用可以使用此代码:

$dest = "http://www.google.fr"
$proxyurl = ([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy($dest)
Invoke-WebRequest $dest -Proxy $proxyurl -ProxyUseDefaultCredentials

答案 2 :(得分:0)

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

如果它在某一点上起作用,你可能以前创建了一个$ WS实例,因此能够在测试期间使用该对象,但是当脚本自上而下处理时,它在新鲜/干燥的运行中,它没有'但是还存在。