使用变量指定计算机名时Get-ChildItem无法输出文件信息
问题分析与解决方案
你的脚本出现无输出的核心原因有两个,同时还有其他潜在问题,以下是具体修正方案:
核心问题点
- CSV文件被循环覆盖:每次执行
Export-CSV都会替换掉之前的内容,最终只会保留最后一次循环的结果(如果有)。 - 计算机名称含无效空白字符:从txt文件读取的行可能带有换行符、空格或制表符,导致UNC路径格式错误,无法访问目标电脑。
- 缺少错误处理:若某台电脑离线、无权限或路径不存在,脚本会静默失败,无法定位问题。
修正后的脚本
# 先清理旧的输出文件(可选,避免残留数据) if (Test-Path "c:\scripts\engage3.csv") { Remove-Item "c:\scripts\engage3.csv" } # 读取计算机列表并清理每个名称的首尾空白字符 $computers = Get-Content -Path "\scripts\pclist.txt" | ForEach-Object { $_.Trim() } foreach ($computer in $computers) { # 跳过空行 if ([string]::IsNullOrWhiteSpace($computer)) { continue } try { # 拼接目标路径 $targetPath = "\\$computer\C$\Pfx Engagement\WM\Workpapers\*\engage.*" Write-Host "正在查询: $computer" # 执行文件查找并追加到CSV Get-ChildItem -Path $targetPath -ErrorAction Stop | Export-Csv "c:\scripts\engage3.csv" -NoTypeInformation -Encoding UTF8 -Append } catch { Write-Warning "查询 $computer 失败: $_" # 可选:记录错误到日志文件 "[$(Get-Date)] $computer 查询失败: $_" | Out-File "c:\scripts\query_errors.log" -Append } }
关键修改说明
Trim()清理计算机名:移除每行的空格、换行符等无效字符,确保UNC路径格式正确。-Append参数:让每次查询结果追加到CSV文件,而非覆盖。try/catch错误处理:捕获访问失败、权限不足等异常,输出错误信息的同时不中断整个循环。- 跳过空行:避免txt文件中的空行生成无效路径。
额外排查步骤
- 在循环内添加
Write-Host "当前路径: $targetPath",验证生成的路径是否与手动运行的一致。 - 单独测试某个计算机名:
若此命令有输出,说明循环中的变量清理或CSV覆盖是主要问题;若无输出,需检查该电脑的网络连接、权限或路径是否存在。$computer = "0543834Laptop" # 替换为txt中的一个名称 Get-ChildItem -Path "\\$computer\C$\Pfx Engagement\WM\Workpapers\*\engage.*"
内容的提问来源于stack exchange,提问作者EBoone
相关产品推荐
相关产品推荐

