多台设备批量查询NetAdapter信息的PowerShell脚本实现方法
脚本问题与优化方案
原脚本核心问题
原脚本完全不能实现跨设备批量查询需求,存在以下缺陷:
- 循环内调用
Get-NetAdapter时未指定远程设备参数,所有查询都在你执行脚本的本地设备上运行,不会访问任何域内目标设备。 - 从AD查询到的
$Machine是包含Name属性的对象,没有展开为纯字符串,后续调用远程参数时容易出现类型匹配错误。 - 没有做连通性检测和异常捕获,遇到设备离线、权限不足、远程服务未开的场景会直接抛出报错中断执行,也没有错误记录。
- 注释明确要求查询Wi-Fi适配器,但脚本没有对网卡类型做过滤,会返回目标设备所有网卡信息。
- 查询结果没有关联对应设备名称,输出后无法区分每条网卡信息属于哪台设备。
优化调整方案
优化后完整脚本
# 从AD获取指定OU下所有设备名称,展开为字符串数组 $Machines = Get-ADComputer -Filter * -SearchBase 'OU=Laptops,OU=Win10Modern,OU=LN,OU=Workstations,DC=cooley,DC=com' | Select-Object -ExpandProperty Name # 批量查询远程设备网卡信息 $adapterResults = ForEach ($Machine in $Machines) { # 先测试设备连通性,避免长时间无响应 if (Test-Connection -ComputerName $Machine -Count 1 -Quiet -ErrorAction SilentlyContinue) { try { # 远程查询,过滤Wi-Fi适配器,追加设备名称字段,不需要过滤可删除-Name参数 Get-NetAdapter -ComputerName $Machine -Name "*Wi-Fi*","*无线*" -ErrorAction Stop | Select-Object @{Name='设备名称';Expression={$Machine}},Name,InterfaceDescription,DriverVersion,DriverDate,DriverProvider } catch { # 捕获查询异常返回错误信息 [PSCustomObject]@{ 设备名称 = $Machine Name = "查询失败" InterfaceDescription = $_.Exception.Message DriverVersion = $null DriverDate = $null DriverProvider = $null } } } else { # 返回离线标记 [PSCustomObject]@{ 设备名称 = $Machine Name = "设备离线" InterfaceDescription = "无法ping通目标设备" DriverVersion = $null DriverDate = $null DriverProvider = $null } } } # 控制台输出结果,可取消注释导出为CSV文件 $adapterResults | Format-Table -AutoSize # $adapterResults | Export-Csv -Path "C:\域内设备网卡信息.csv" -NoTypeInformation -Encoding UTF8
额外使用说明
- 运行脚本的账号需要拥有目标远程设备的管理员权限,且远程设备需要开启WinRM/WMI远程访问权限,域环境可通过组策略批量配置。
- 如果需要查询的设备数量较多,可改用
Invoke-Command并行执行查询,效率更高,参考写法:
# 并行远程执行,适合10台以上设备批量查询 $adapterResults = Invoke-Command -ComputerName $Machines -ScriptBlock { Get-NetAdapter -Name "*Wi-Fi*","*无线*" | Select-Object Name,InterfaceDescription,DriverVersion,DriverDate,DriverProvider } -ErrorAction SilentlyContinue | Select-Object @{Name='设备名称';Expression={$_.PSComputerName}},* -ExcludeProperty PSComputerName,RunspaceId
内容的提问来源于stack exchange,提问作者Khalifa96
相关产品推荐
相关产品推荐

