共享驱动器文件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
相关产品推荐
相关产品推荐

