【发布时间】:2018-07-27 07:27:39
【问题描述】:
所以我尝试制作一个备份脚本,该脚本将从我的 mssql 下载 csv,然后压缩文件,然后将备份上传到亚马逊 S3。
我遇到的问题是,当我每天运行脚本时,表格平均有 2000 万行。看起来它只是永远滞后,直到它在 20 分钟后完成。我想知道是否有办法专门为 invoke-sqlcmd 显示进度条。我做了一些研究,我能找到的所有示例都是仅在 for 循环上制作进度条,而不是单个命令进度。
这是我的代码:
ECHO "Starting Download"
Import-Module sqlps
#$SQLquery="SELECT * FROM dbo.$PREFIX$i"
$SQLquery="SELECT * FROM dbo.events"
ECHO "Executing query = $SQLquery"
$hostname = "."
$pass = "test"
$usern = "test"
$database = "theDB"
$result=invoke-sqlcmd -ServerInstance $hostname -query $SQLquery -HostName $hostname -Password $pass -Username $usern -Database $database -verbose
#echo $result
pause
$result |export-csv -path $CSVPATH -notypeinformation
pause
ECHO "Starting Zip:"
Compress-Archive -LiteralPath $CSVPATH -CompressionLevel Optimal -DestinationPath $ZIPPATH
ECHO "Starting Delete: $CSVPATH "
del "$CSVPATH"
echo "Removed $CSVNAME"
aws s3 cp $ZIPPATH s3://test_$ZIPNAME
pause
这个脚本可以工作,但正如我所说,我想在 invoke-sqlcmd 中添加一个进度条,这样它在下载大文件时就不会被冻结。
这是我目前能找到的,但这仅适用于循环进程
$VerbosePreference = "Continue"
Write-Verbose "Test Message"
for ($a=1; $a -lt 100; $a++) {
Write-Progress -Activity "Working..." -PercentComplete $a -CurrentOperation "$a% complete" -Status "Please wait."
Start-Sleep -Milliseconds 100
}
【问题讨论】:
-
bcp怎么样?它会在提取数据的同时打印进度。 -
或者你可以分批下载这个——比如:检查大小,分成 10 个部分并在 10 次迭代中下载?然后您可以根据迭代次数下降来编写进度,并且 - 如果任何较小的批次由于任何原因而失败,则可以恢复下载:)。