无论我做什么,我都无法捕捉到这种类型的异常:
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。
怎么做?
答案 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;}