添加TRY-CATCH逻辑后,Powershell脚本失败

时间:2017-05-30 16:23:58

标签: powershell

我有一个脚本,我已经使用了一段时间将备份从服务器传输到FTP位置。

在过去的几个月里它一直没有任何打嗝,但最近互联网连接失败了所以我试图通过添加TRY-CATCH来减轻这对脚本失败的影响阻止重试逻辑。

初始逻辑(有效)是:

$requestStream = $ftp.GetRequestStream()
$fileStream = [System.IO.File]::OpenRead($backup_target_hss)
$chunk = New-Object byte[] $bufSize

$retryCount = 0

while( $bytesRead = $fileStream.Read($chunk,0,$bufsize))
{
    $requestStream.write($chunk, 0, $bytesRead)
    $requestStream.Flush()
    "Flushed: " + $retryCount
}
$FileStream.Close()
$requestStream.Close()

并继续上传文件并正常工作直至结束。

但是在添加了try-catch块后,似乎它会不断跳过通过$requestStream.Write$requestStream.Flush()发送文件:

$requestStream = $ftp.GetRequestStream()
$fileStream = [System.IO.File]::OpenRead($backup_target_hss)
$chunk = New-Object byte[] $bufSize

$retryCount = 0

while( $bytesRead = $fileStream.Read($chunk,0,$bufsize) -and $retryCount -ne 30 )
{
    try {
        $requestStream.write($chunk, 0, $bytesRead)
        $requestStream.Flush()
        "Flushed: " + $retryCount
        }
    catch [Exception] {
        Start-Sleep -s 10
        $retryCount += 1
        "Retry Count " + $retryCount

        echo $_.Exception|format-list -force
    }
}
$FileStream.Close()
$requestStream.Close()

我这样说是因为两个脚本的打印数量都相同"Flushed"而且所有消息都是"Flushed 0",但TRY-CATCH版本在5秒内完成,而没有错误处理的版本工作正常。

因为两个脚本只打印"刷新0"这意味着没有跳转到"CATCH"块,因此$ retryCount变量不会增加,因此"TRY"完成,没有任何例外。

为什么会出现这种情况以及如何解决这个问题?

更新/澄清

当我说脚本失败时,我的意思是使用TRY-CATCH时脚本版本的结果是上传到我的FTP的单个1KB文件,而不是我在#上传的完整2.8GB文件39;我没有使用TRY-CATCH。

在这两种情况下,脚本都会运行而不会抛出错误,但是当使用TRY / CATCH时,它只会更快完成并且实际上并没有完成整个" flush"该文件。

0 个答案:

没有答案