我正在编写一个 PowerShell 脚本,需要从远程 Web 服务器下载几个大文件,然后才能继续执行其他任务。我的项目要求之一是显示每次下载的进度,以便最终用户知道发生了什么。
对另一个 SO 问题的回复包含一个使用注册事件和 Net.WebClient.DownloadFileAsync 的解决方案。但是,当我在接受的答案中尝试解决方案时,下载在我的脚本处理所有 DownloadProgressChanged 事件之前很久就完成了。
我创建了一个测试脚本,我在下面提供了该脚本以重现问题并尝试隔离它发生的位置。起初我认为问题在于 Write-Progress cmdlet 很慢,所以我将其替换为 Write-Host 以显示完成的百分比。这产生了许多具有相同百分比值的重复行。考虑到 Write-Host 也可能很慢,我将事件处理程序的操作更改为仅在更改时输出百分比。这没有任何区别。
我在输出中注意到,在事件处理程序指示下载已完成几个百分点之前,下载已完成。最初的几个百分点有很大的延迟,然后它加速了。但是即使在下载完成后,完成百分比的输出仍然很慢。我对脚本进行了另一次修改,以显示每次百分比变化所用的时间。
我的环境是使用 PowerShell 2.0 的 Windows 7 和 Server 2008。我已经在两个操作系统上尝试过该脚本,结果相同。我没有使用 PS 配置文件,Server 2008 计算机是全新安装的。
这是我的测试脚本。
# based on /sf/answers/344910681/
$client = New-Object System.Net.WebClient
$url=[uri]"https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2"
$file="$env:USERPROFILE\Downloads\linux-2.6.18.tar.bz2"
try {
Register-ObjectEvent $client DownloadProgressChanged -action {
if ( $eventargs.ProgressPercentage -gt $percent ) {
$percent = $eventargs.ProgressPercentage
if ( $start_time -eq $null ) {
$start_time = $(get-date)
}
# Get the elapsed …Run Code Online (Sandbox Code Playgroud) 我正在研究一个Java项目的概念,该项目可以检测计算机时钟何时被更改.想法是在计算机时钟上记录日期和时间并将其存储在文件中.然后,我希望能够在其上运行规则,如果时钟已更改,则显示消息.我也在考虑合并诸如"允许不超过5分钟的更改"等规则.这是为了方便将时间改变为奇数分钟.
我还需要结合时钟所做的更改.例如,在一年中的某些时间(英国时间)前进一小时或后退一小时.
我不确定是否已经有一个Java系统可以实现这一点,但我确实不知道从哪里开始.
我创建了一个桌面应用程序 是否有任何书籍或网站上有设计桌面应用程序的示例?
我一直对Perl执行的常量折叠优化感到好奇,但是当代码中有Moose涉及的机会是不会执行常量折叠时(如果我错了请纠正我).
我有Moose代码,其中包含如下方法:
sub foo {
my ($self) = shift;
my $test_y = $self->pos->[1];
#...
if ($self->is_map_val($self->pos->[0]+8, $test_y+32) ||
$self->is_map_val($self->pos->[0]+32-8, $test_y+32)) {
{
heavy_stuff();
}
#...
}
Run Code Online (Sandbox Code Playgroud)
当我运行时,perl -MO=Deparse ./program.pl我得到几乎相同的代码行:
if ($self->is_map_val($self->pos->[0] + 8, $test_y + 32) or
$self->is_map_val($self->pos->[0] + 32 - 8, $test_y + 32))
{
heavy_stuff();
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么Perl没有优化32-8为24?是否有任何真正的原因Perl没有这样做(也许Moose子系统让生活变得更难?).
如果它有帮助,我运行Perl(v.5.14.2)
任何人都可以告诉如何删除AngularJS中的货币符号吗?
value = $filter('currency')(value);
Run Code Online (Sandbox Code Playgroud)
我得到一个美元符号.我想删除它.
我意识到有一个命令:
BACKUP DATABASE [DB Name] TO DISK [PATH]
Run Code Online (Sandbox Code Playgroud)
是否可以备份到远程位置? - EG Web服务器而不是数据库服务器?
我正在寻找一种在Perl中生成以下内容的不太长的方法:
获取当前时间(月,日和年)的代码的一部分.例如,如果我们在2013年5月27日,那么输出应该是20130527
我现在认为,如果我们使用"本地时间",就像
$date_str = localtime;
Run Code Online (Sandbox Code Playgroud)
输出格式为:Wed Jul 18 07:24:05 2001还有其他特殊变量可用吗?