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

共享驱动器文件LastWriteTime统计异常:ForEach循环问题求助

问题定位与修复:PowerShell共享目录文件计数错误

核心错误原因

你的ForEach循环里的gci(Get-ChildItem的别名)没有指定目标共享目录的路径,每次执行都是在当前打开PowerShell的工作目录下递归查找,所以40次循环输出的全是同一个目录的计数结果,自然重复出现数字20。

修复步骤与修正脚本

要解决这个问题,需要从Win32_Share返回的对象中提取共享名称,拼接成完整的共享路径,然后让gci遍历这个路径:

# 改用Get-Credential更安全,支持密码输入
$creds = Get-Credential -Message "输入fileshare.whatever的访问凭据"
$dirs = Get-WmiObject -class Win32_Share -ComputerName fileshare.whatever -Credential $creds

# 可选:过滤掉ADMIN$、C$这类系统默认共享,避免无意义的统计
$targetShares = $dirs | Where-Object { $_.Name -notmatch '^\$' }

foreach ($dir in $targetShares) {
    # 拼接完整的共享路径
    $sharePath = "\\fileshare.whatever\$($dir.Name)"
    # 只统计文件,用年份匹配替代字符串模糊匹配,更准确
    $2023FileCount = (Get-ChildItem -Path $sharePath -Recurse -File | Where-Object { $_.LastWriteTime.Year -eq 2023 }).Count
    Write-Host "共享目录 [$($dir.Name)] 中2023年修改的文件数量:$2023FileCount"
}

额外优化说明

  • 替换Read-Host为Get-Credential:避免明文输入密码,更符合安全规范
  • 增加-File参数:只统计文件,排除目录对象,计数更准确
  • 用LastWriteTime.Year -eq 2023替代字符串匹配:避免因系统区域格式差异导致的匹配错误(比如部分系统日期格式是yyyy/MM/dd,部分是MM/dd/yyyy)
  • 过滤系统共享:默认共享通常是系统目录,一般不需要统计,也可能需要更高权限才能访问,过滤后减少报错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:42:52