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

运行PowerShell查询多服务器大文件提示网络路径未找到如何解决?

问题排查与修复方案

核心错误原因

  • 最核心问题是变量未正确遍历:脚本第一行读取服务器列表存入的是$computers(复数)变量,但后续直接调用不存在的$computer(单数)变量,完全没有对服务器列表做循环遍历,导致生成的网络路径不合法,直接触发「网络路径未找到」报错
  • 次要语法错误1:服务器列表路径末尾多了冗余的点字符,可能导致读取Servers.txt文件失败
  • 次要逻辑错误2:排序前就将文件大小转为字符串格式,最终排序是按字符顺序而非数值大小排序,无法得到正确的文件大小倒序结果
  • 环境依赖问题:目标服务器需开放SMB 445端口、默认启用的管理员共享未被关闭、当前执行脚本的账号拥有所有目标服务器的本地管理员权限,否则也会触发路径访问失败

修复后的完整脚本

# 修正路径末尾的冗余点,读取服务器列表
$computers = Get-Content -Path "D:\Automation_space_check\Servers.txt"

# 遍历每一台目标服务器
foreach ($computer in $computers) {
    # 用官方推荐的Get-CimInstance替代已弃用的Get-WmiObject,增加异常跳过逻辑
    try {
        $volumes = Get-CimInstance -ClassName Win32_Volume -ComputerName $computer -ErrorAction Stop
    }
    catch {
        Write-Warning "无法连接到服务器 $computer,请检查网络、权限或WMI服务状态:$_"
        continue
    }

    foreach ($volume in $volumes) {
        # 仅处理有盘符的本地固定磁盘
        if ($volume.DriveType -eq 3 -and $null -ne $volume.DriveLetter) {
            $sharePath = "\\$computer\$($volume.DriveLetter.Replace(':','$'))"
            Write-Host "正在扫描服务器 $computer 的 $($volume.DriveLetter) 盘,路径:$sharePath"
            Get-ChildItem -Path $sharePath -Force -Recurse -ErrorAction SilentlyContinue | 
                # 先按数值类型的文件长度排序,再格式化输出大小,保证排序正确性
                Sort-Object -Property Length -Descending | 
                Select-Object -First 10 -Property Name, DirectoryName, @{
                    Name = "Size(MB)"
                    Expression = { "{0:N1}" -f ($_.Length / 1MB) }
                }
        }
    }
}

额外注意事项

  • 执行前请确认所有目标服务器的Windows防火墙已放行SMB协议(445端口)
  • 执行脚本的账号需属于目标服务器的本地管理员组,否则无法访问默认管理员共享(C$、D$等)
  • 若为域环境,建议使用域管理员账号执行脚本,避免跨机器权限校验失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:27:02