请求编写PowerShell脚本:检查网络共享指定文件并输出至CSV
修正后的PowerShell脚本方案
问题分析
你的原脚本存在几个关键问题:
- 遍历
textfile.txt的条目但完全没用到循环变量$_,每次都固定查询本地C:\test目录 - 每次循环执行
Export-Csv会覆盖之前的结果,最终只保留最后一次循环的输出 -Include "*"没有起到过滤特定文件名的作用,等同于遍历所有文件- 目标是检查网络共享目录,但代码里写的是本地路径
修正步骤与代码
假设name.txt里每一行是要检查的特定文件名(比如report.pdf、data.xlsx),指定的网络共享目录是\\fileserver\shared,以下是修正后的脚本:
# 读取要检查的文件名列表 $targetFiles = Get-Content "C:\实际路径\name.txt" # 指定要检查的网络共享目录(用UNC路径,比如\\服务器名\共享文件夹) $networkPath = "\\fileserver\shared" # 初始化空数组存储所有结果 $results = @() foreach ($fileName in $targetFiles) { # 在网络目录递归查找匹配的文件,跳过无权限访问的目录 $foundFiles = Get-ChildItem -Path $networkPath -Filter $fileName -Recurse -ErrorAction SilentlyContinue if ($foundFiles) { # 找到文件时,记录每个匹配文件的详细信息 foreach ($file in $foundFiles) { $results += [PSCustomObject]@{ TargetFileName = $fileName Name = $file.Name DirectoryName = $file.DirectoryName Exists = $file.Exists FullName = $file.FullName CreationTime = $file.CreationTime LastWriteTime = $file.LastWriteTime } } } else { # 未找到文件时,也记录该文件名的查找状态 $results += [PSCustomObject]@{ TargetFileName = $fileName Name = $null DirectoryName = $null Exists = $false FullName = $null CreationTime = $null LastWriteTime = $null } } } # 将所有结果一次性导出到CSV,避免覆盖 $results | Export-Csv -Path "C:\output\file_check_results.csv" -NoTypeInformation -Encoding UTF8
使用说明
- 替换
C:\实际路径\name.txt为你本地name.txt的真实路径 - 替换
\\fileserver\shared为目标网络共享的UNC路径 -ErrorAction SilentlyContinue用于跳过无权限访问的子目录,防止脚本中途中断- 脚本会完整记录每个目标文件名的查找结果,无论是否找到,都能在CSV里清晰核对
内容的提问来源于stack exchange,提问作者PConroy
相关产品推荐
相关产品推荐

