定期扫描共享存储空间的核心目标是建立可复用、可追踪、可告警的检查机制,覆盖磁盘空间耗尽、共享配置异常、底层存储健康退化三类风险;需结合任务计划程序定时执行,用Get-SmbShare获取并过滤共享,robocopy替代递归统计大小,串联Get-Volume、Get-StoragePool、Get-IscsiSession检查多层状态,结果导出带时间戳CSV并支持趋势分析与邮件告警。
定期扫描共享存储空间的核心目标
不是单纯跑一遍命令,而是建立可复用、可追踪、可告警的检查机制。重点覆盖三类风险:磁盘空间耗尽、共享配置异常、底层存储健康退化。powershell 本身不提供“定时”能力,需结合 windows 任务计划程序(task scheduler)触发脚本执行。
获取共享文件夹及其占用情况
先定位哪些路径是真正对外共享的,再逐个计算大小。避免扫描系统默认共享(如 C$、ADMIN$)或临时共享。
- 用 Get-SmbShare 获取当前所有 SMB 共享(比旧版 WMI 更准确、支持更多属性)
- 过滤掉隐藏共享:| Where-Object { -not $_.Name.EndsWith('$') }
- 对每个共享路径调用 Get-ChildItem -Recurse -Force 并统计大小——但注意:大目录下直接递归可能超时或卡死,推荐改用 robocopy /L /S /NJH /FP /NC /NS /NFL 配合 PowerShell 解析输出,更稳定
- 结果中保留共享名、本地路径、总大小、最后修改时间,便于后续比对趋势
关联底层存储状态一并检查
共享只是表层,真正出问题常在磁盘、卷或存储池。一次扫描应串联多层信息:
- 对每个共享路径所在的驱动器,运行 Get-Volume | Where-Object {$_.DriveLetter -eq 'D'} 查剩余空间,低于 15% 触发标记
- 若使用 Storage Spaces,追加 Get-StoragePool | Get-VirtualDisk | Get-Disk 验证冗余是否完整、是否有重建中状态
- 若走 iSCSI,加入 Get-IscsiSession | Where-Object {$_.ConnectionStatus -ne 'Connected'} 排查链路中断
- 所有异常项统一打上标签(如 “空间不足”、“连接断开”、“池降级”),方便汇总输出
生成报告并自动归档
每次扫描结果必须留存,才能看出容量增长趋势或配置漂移。
- 输出为 CSV 文件,含时间戳(如 ScanReport_20260619_0710.csv),字段包括:共享名、路径、大小(GB)、剩余空间(%), 健康状态, 检查时间
- 用 Export-Csv -Encoding UTF8 -Append 追加到主日志文件,便于 Excel 或 Power BI 分析
- 可选增强:当某共享 7 天内增长超 20%,或剩余空间连续 3 次低于 10%,用 Send-MailMessage 发送告警邮件(需提前配置 SMTP 参数)
- 旧报告按月归档,脚本开头加入清理逻辑:Get-ChildItem *.csv | Where-Object {$_.LastWriteTime -lt (Get-Date).AddMonths(-3)} | Remove-Item











