如何捕获特定的start-bittransfer“需要代理身份验证”异常?

时间:2014-04-22 13:44:38

标签: powershell try-catch

无论我做什么,我都无法捕捉到这种类型的异常:

Start-BitsTransfer : HTTP status 407: Proxy authentication is required.
At line:4 char:6
+      Start-BitsTransfer -Source $url -Destination $fullPath
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Start-BitsTransfer], Exception
    + FullyQualifiedErrorId : StartBitsTransferCOMException,Microsoft.BackgroundIntelligentTransfer.Management.NewBitsTransferCommand

我不能使用“invoke-command”和[System.Management.Automation.RuntimeException](PSRemotingTransportException),因为在运行远程脚本块时不支持BITS。

怎么做?

2 个答案:

答案 0 :(得分:2)

不能直接回答您的问题,但作为先发制人的解决方案,您可以在尝试开始BITS转移之前检查是否需要代理身份验证。它不会捕获该错误,但它将有效地测试相同的条件并允许您补偿它。

您可以做的是创建一个System.Net.WebClient对象,看看它是否需要代理身份验证:

$WC = New-Object System.Net.WebClient
$ProxyAuth = !$WC.Proxy.IsBypassed("http://www.stackoverflow.com")

现在,如果您落后于代理$ProxyAuth,那么您可以根据需要对其进行测试,如果您运行的是PSv3或更高版本,则可以设置Start-BitsTransfer的默认参数使用提供的凭据:

If($ProxyAuth){
    $ProxyCred = Get-Credential -Message "Enter credentials for Proxy Authentication"
    $PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyAuthentication","Basic")
    $PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyCredential",$ProxyCred)
}

现在您可以运行该脚本,如果需要代理身份验证,它将要求提供凭据,然后执行您的转移。

其中很多都是从PowerShell Magazine获得的,或改编自<{3}}。

答案 1 :(得分:0)

你有什么尝试?从发布的snippit中,可以合理地假设使用正常的TryCatch块在使用STOPA的ErrorAction时会起作用...

尝试{Start-BitsTransfer -ea STOP ....;} catch {DoSomething;}