调用-的WebRequest GetSystemWebProxy()(Invoke-WebReque

2019-08-18 00:54发布

在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

然而,当我试图做到这一点我得到一个错误,(显然是从我公司代理),这表明我的证书无法验证。 我希望这最终会工作,但也许我只是做一个简单的错误。

Answer 1:

也许这可以帮助,我把它放在我的个人资料。 它是使用新的$PSDefaultParameterValues偏好变量为新网络的cmdlet设置的默认值代理。 代码检测,如果我在我的办公室环境,并设置相应的设置。 这为我节省指定每次使用这些命令时的设置。

if(Test-Connection myCorpProxy -Count 1 -Quiet)
{
    $global:PSDefaultParameterValues = @{
        'Invoke-RestMethod:Proxy'='http://myCorpProxy:8080'
        'Invoke-WebRequest:Proxy'='http://myCorpProxy:8080'
        '*:ProxyUseDefaultCredentials'=$true
    }
}


Answer 2:

使用可以使用此代码:

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


Answer 3:

与上面的代码(尽管吉文的更优雅)的实际问题是,你想存在之前,设置一个变量的属性。 该SessionVariable“$ WS”你叫调用-WebRequest的,但你要设置它上面的.Proxy属性之前不存在。

如果它工作在一个点上,你可能已经创建$ WS的实例之前,因此能够在测试过程中,但在新鲜/干运行与对象的工作时,脚本处理自上而下的,它还不存在。



文章来源: Invoke-WebRequest GetSystemWebProxy()