我正在使用如下所示的简单行下载一个文件:
$webclient = New-Object -TypeName System.Net.WebClient
$webclient.DownloadFile("https://www.example.com/file", "C:/Local/Path/file")
问题是,我希望在下载时使用弹出窗口或使用外壳中的进度条向用户显示一条消息。是否可以制作一个在下载完成时消失的弹出框,或者一个监控下载进度的进度条?
我正在使用如下所示的简单行下载一个文件:
$webclient = New-Object -TypeName System.Net.WebClient
$webclient.DownloadFile("https://www.example.com/file", "C:/Local/Path/file")
问题是,我希望在下载时使用弹出窗口或使用外壳中的进度条向用户显示一条消息。是否可以制作一个在下载完成时消失的弹出框,或者一个监控下载进度的进度条?
5条答案
按热度按时间dauxcl2d1#
要显示下载文件的进度条,请查看Jason Niver的博客文章:
Downloading files from the internet in Power Shell (with progress)
基本上,您可以创建一个函数,该函数仍然使用Web客户端功能,但包括一种捕获状态的方法。然后您可以使用WRITE-Progress Power外壳功能向用户显示状态。
然后,您只需调用该函数:
此外,这里还有其他一些来自docs.microsoft for Powrshell7的WRITE-Progress示例。
Write-Progress
yrwegjxp2#
在V2中,您可以只使用BitsTransfer模块,例如:
mftmpeh83#
当我重新编写一些安装脚本时,我遇到了这个问题。这些方法都不是理想的。第一种方法在Windows PowerShell上存在性能问题,第二种方法需要最新的系统,我们都知道它在现实生活中是如何工作的。🤷🏿♀️
为了获得尽可能好的性能,我按照PowerShell的最佳实践,将这两种方法合并为一种智能方法,使其更加通用。
可以在here中找到一些基准。
guykilcj4#
你也可以使用它来获得更快的下载速度和令人印象深刻的进度条。
fdx2calv5#
这是一个老问题,但我有一个很好的解决方案。
现在,您还需要一个函数来转换文件大小:
我从Invoke-DownloadFile获取代码片段。功劳归于蒂姆·斯莫尔。