如何排查使用.NET产品的程序?针对.NET Core 7 SEoL的远程方案咨询
识别终端节点中使用.NET产品的进程的最佳方法
针对你需要批量处理大量终端节点、排查.NET Core 7使用情况的需求,以下是几个可靠的方法:
1. 用.NET CLI工具dotnet-list-processes(跨平台+远程支持)
- 先在目标节点安装该工具(依赖.NET SDK,若没有可部署便携版):
dotnet tool install --global dotnet-list-processes - 直接运行命令获取精准的.NET进程信息,包括进程ID、名称、使用的.NET版本:
dotnet list-processes - 远程批量执行:通过PowerShell远程(Windows)或SSH(Linux/macOS)调用,比如PowerShell命令:
Invoke-Command -ComputerName "目标节点名" -ScriptBlock { dotnet list-processes }
2. Windows系统用WMI/CIM查询(无需额外工具)
- 利用系统自带的PowerShell和WMI,直接关联进程与.NET运行时:
Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match "dotnet|mscorlib|coreclr" } | Select-Object ProcessId, Name, CommandLine, @{Name='DotNet版本'; Expression={ $modules = Get-CimInstance Win32_ProcessModule -Filter "ProcessId=$($_.ProcessId)" $clrModule = $modules | Where-Object { $_.Name -like "*clr.dll*" } $clrModule ? $clrModule.FileVersion : "未知" }} - 同样可以通过
Invoke-Command批量在远程节点执行该脚本。
3. 批量扫描自动化脚本
- 写一个PowerShell脚本遍历所有终端节点,统一收集信息:
# 从文件读取终端节点列表 $节点列表 = Get-Content "终端节点清单.txt" foreach ($节点 in $节点列表) { try { Write-Host "=== 正在扫描 $节点 ===" # 先确保工具已安装,再获取进程信息 Invoke-Command -ComputerName $节点 -ScriptBlock { if (-not (Get-Command "dotnet-list-processes" -ErrorAction SilentlyContinue)) { dotnet tool install --global dotnet-list-processes } dotnet list-processes | Select-Object -Skip 2 } } catch { Write-Warning "连接 $节点 失败: $_" } }
4. 优化tasklist的不稳定问题
- 替换单纯的
tasklist查询,用wmic做更精准的过滤:wmic process where "name like '%dotnet%' or name like '%clr%'" get ProcessId, Name, CommandLine
这个能覆盖更多.NET进程类型,避免遗漏直接以dotnet.exe启动的程序。
内容的提问来源于stack exchange,提问作者GumChewinNetSpecialist
相关产品推荐
相关产品推荐

