【发布时间】:2022-01-21 17:14:54
【问题描述】:
我正在编写一个 Powershell 脚本,旨在在完成一个或多个文件的下载后关闭 Windows 机器(笔记本电脑/PC)(为了示例,我们假设这里是一个大文件) .
简而言之,我们每 x 秒读取整个下载文件夹的大小,并比较延迟前后的大小。如果最近时间没有变化,说明下载要么完成,要么卡住,两种情况都会导致关机。
给定以下脚本(大小获取器在某些时候可以是一个独立的函数,是的):
#Powershell5
#Major Minor Build Revision
# ----- ----- ----- --------
# 5 1 19041 1320
$downloadDir = "C:\Users\edi\Downloads"
while (1)
{
$s1 = Get-ChildItem -Path $downloadDir | Measure-Object -Property Length -Sum | Select-Object Sum
write-host "S1:" $s1.sum
# this 3 seconds time is just for testing purposes; in real case scenario this will most
# likely be set to 60 or 120 seconds.
Start-Sleep -s 3
$s2 = Get-ChildItem -Path $downloadDir | Measure-Object -Property Length -Sum | Select-Object Sum
write-host "S2:" $s2.sum
if ($s1.sum -eq $s2.sum)
{
write-host "Download complete, shutting down.."
# loop exit is this, actual shutdown; commented out for testing purposes.
#shutdown /s
}
}
我面临的问题是文件大小读取不是“实时”完成的。换句话说,文件大小并没有像您通常在资源管理器视图中看到的那样发生变化。我需要能够实时读取这些数字(更改文件大小)。
有趣的事实:在下载正在进行和脚本运行时,如果手动转到下载文件夹并按 F5 / 刷新...数字会发生变化(大小读数是准确的)。
旁注:我的研究让我看到了这篇可能提出根本原因的文章,但我不能 100% 确定它:https://devblogs.microsoft.com/oldnewthing/20111226-00/?p=8813
感谢您对此的任何想法。提前致谢!
【问题讨论】:
标签: powershell filesize ntfs