You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell获取正在复制的目标文件实时大小?

跨服务器复制文件时获取实时目标文件大小的解决方案

问题根源

跨SMB共享复制文件时,本地PowerShell默认读取的是缓存的文件元数据,不会主动向目标服务器请求最新的文件状态。而资源管理器右键查看属性时,会触发一次强制的文件信息同步,所以之后再运行PowerShell就能拿到正确的当前大小。

可行解决方法

方法1:用.NET FileInfo强制刷新缓存

直接调用.NET类的Refresh()方法,强制从服务器拉取最新文件信息:

# 方式1:基于Get-Item结果刷新
$file = Get-Item "\\serverB\folder\file.iso"
$file.Refresh()
$currentSize = $file.Length
Write-Host "当前文件大小:$currentSize 字节"

# 方式2:直接实例化FileInfo
$fileInfo = New-Object System.IO.FileInfo("\\serverB\folder\file.iso")
$fileInfo.Refresh()
$currentSize = $fileInfo.Length
Write-Host "当前文件大小:$currentSize 字节"

方法2:通过CIM直接查询目标服务器

绕开本地缓存,直接从目标服务器的CIM服务获取文件实时数据:

# 注意:Filter中的路径是目标服务器的本地路径,需将共享路径转换为服务器本地路径,同时转义反斜杠
$currentSize = (Get-CimInstance -ComputerName serverB -ClassName CIM_DataFile -Filter "Name='C:\\folder\\file.iso'").FileSize
Write-Host "当前文件大小:$currentSize 字节"

方法3:调用fsutil工具查询

利用系统自带的fsutil命令,它会主动请求服务器返回最新文件大小:

$output = fsutil file queryfile "\\serverB\folder\file.iso"
$currentSize = ($output | Select-String "File Size").Line.Split(":")[1].Trim()
Write-Host "当前文件大小:$currentSize 字节"

内容的提问来源于stack exchange,提问作者Comatose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:00:52