在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
然而,当我试图做到这一点我得到一个错误,(显然是从我公司代理),这表明我的证书无法验证。 我希望这最终会工作,但也许我只是做一个简单的错误。
也许这可以帮助,我把它放在我的个人资料。 它是使用新的$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
}
}
使用可以使用此代码:
$dest = "http://www.google.fr"
$proxyurl = ([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy($dest)
Invoke-WebRequest $dest -Proxy $proxyurl -ProxyUseDefaultCredentials
与上面的代码(尽管吉文的更优雅)的实际问题是,你想存在之前,设置一个变量的属性。 该SessionVariable“$ WS”你叫调用-WebRequest的,但你要设置它上面的.Proxy属性之前不存在。
如果它工作在一个点上,你可能已经创建$ WS的实例之前,因此能够在测试过程中,但在新鲜/干运行与对象的工作时,脚本处理自上而下的,它还不存在。