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

使用变量指定计算机名时Get-ChildItem无法输出文件信息

问题分析与解决方案

你的脚本出现无输出的核心原因有两个,同时还有其他潜在问题,以下是具体修正方案:

核心问题点

  1. CSV文件被循环覆盖:每次执行Export-CSV都会替换掉之前的内容,最终只会保留最后一次循环的结果(如果有)。
  2. 计算机名称含无效空白字符:从txt文件读取的行可能带有换行符、空格或制表符,导致UNC路径格式错误,无法访问目标电脑。
  3. 缺少错误处理:若某台电脑离线、无权限或路径不存在,脚本会静默失败,无法定位问题。

修正后的脚本

# 先清理旧的输出文件(可选,避免残留数据)
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文件中的空行生成无效路径。

额外排查步骤

  1. 在循环内添加Write-Host "当前路径: $targetPath",验证生成的路径是否与手动运行的一致。
  2. 单独测试某个计算机名:
    $computer = "0543834Laptop" # 替换为txt中的一个名称
    Get-ChildItem -Path "\\$computer\C$\Pfx Engagement\WM\Workpapers\*\engage.*"
    
    若此命令有输出,说明循环中的变量清理或CSV覆盖是主要问题;若无输出,需检查该电脑的网络连接、权限或路径是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:05:25