一款为 IT 专业人员和系统管理员量身打造的现代化 Windows 桌面 IT 工具箱,旨在将硬件资产扫描、系统诊断、网络发现和日常运维修复等工作化繁为简。
Asset Sonar 是一款基于 WinUI 3 和 .NET 8 构建的模块化应用程序。它利用现代化的界面和可扩展的架构,为 IT 运维人员提供了一个集成的多功能工具箱。
最初它是一个资产扫描器,现已发展为一个包含多个独立工具的运维平台。
Asset Sonar 将功能划分为多个独立的模块,您可以通过左侧的导航菜单轻松访问。
这是应用的核心功能,专注于硬件盘点与同步。
- 💻 全方位硬件扫描: 通过 WMI 并行扫描并聚合关键硬件信息:
- 主板/整机: 品牌、型号、序列号,并为戴尔、惠普、联想等主流品牌自动生成保修查询链接。
- 处理器 (CPU): 制造商、完整型号及处理器ID。
- 内存 (RAM): 制造商、型号、容量、序列号、类型 (DDR3/4/5) 和频率。
- 显卡 (GPU)、硬盘 (Disk)、显示器、网卡、外设。
- 系统信息: 操作系统版本、序列号及激活状态。
- 🔄 Snipe-IT 集成:
- 通过 API 将扫描到的硬件信息自动同步到您的 Snipe-IT 平台。
- 智能资产管理:根据序列号 (
GET /api/v1/hardware/byserial/...) 自动判断是创建新资产还是更新现有资产。 - 自动关联:自动“Get-or-Create”制造商、型号、分类,并将内存、硬盘等作为组件关联到主资产。
- 📄 多格式数据导出: 一键将扫描到的硬件信息导出为多种专业报告格式:
- Excel (.xlsx): 使用
ClosedXML生成结构化的工作簿。 - CSV (.csv): 快速生成通用的 UTF-8 编码文件。
- PDF (.pdf): 使用
QuestPDF创建专业、美观的硬件信息报告。
- Excel (.xlsx): 使用
一系列为解决日常 IT 问题而设计的独立工具模块。
- 🌐 网络扫描:
- 扫描并发现局域网内的所有活动设备。
- 以贴片风格 UI 实时显示其 IP 地址、主机名、在线状态和网络延迟(ms)。
- 🩺 系统诊断:
- 运行一系列健康检查,快速评估系统状态。
- 检查项包括: CPU/内存使用率、关键服务状态、硬盘健康度 (S.M.A.R.T.)、内外网连通性 (Ping 百度和 Google DNS
8.8.8.8)。 - 采用 Win11 风格的自适应贴片 UI 展示结果。
- 🖨️ 打印机共享修复:
- 一个专门用于解决 Windows 打印机共享疑难杂症的工具集。
- 修复功能包括:
- 重启打印后台处理程序 (Spooler)。
- 一键应用“文件和打印机共享”防火墙规则。
- 应用
0x0000011b(PrintNightmare) 兼容性注册表修复。 - 应用
0x00000709(默认打印机) 注册表修复。 - 重置 WMI 存储库 (
winmgmt /salvagerepository)。 - [高风险] 清理打印机驱动程序缓存 (删除
System32\spool\drivers下的内容)。
- 💻 已安装软件列表:
- 扫描注册表
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall(及WOW6432Node节点),快速列出本机安装的所有应用程序。 - 使用可排序、可调整大小的
DataGrid控件显示程序名称、版本、发布者和安装日期。
- 扫描注册表
- 🗑️ 系统清理工具:
- 提供一个安全、可视化的界面来清理常见的系统垃圾文件。
- 清理选项包括:
- 用户临时文件 (
%TEMP%) - Windows 临时文件 (
C:\Windows\Temp) - Windows 更新缓存 (
SoftwareDistribution\Download) - 清空回收站 (通过 PowerShell
Clear-RecycleBin)
- 用户临时文件 (
- ⚙️ 多方案配置:
- 通过应用内的“配置”页面管理 Snipe-IT 服务器信息、用户信息以及 类别ID映射 和 资产标签前缀/代码。
- 多配置方案支持:通过便携的
profiles.json文件在应用内管理多套 Snipe-IT 服务器配置和用户信息。
Asset Sonar 采用了一系列现代 .NET 技术和成熟的软件设计模式,确保了其高性能、高可扩展性和高可维护性。
解决方案 (ItAssetTool.sln) 被清晰地划分为四个工程:
ItAssetTool.Core: 核心库。定义了整个应用共享的数据模型(如HardwareInfo,InstalledProgram,CleanupItem)和所有插件接口(IScanPlugin,IExportPlugin等)。ItAssetTool.Logic: 逻辑层。包含了PluginManager,负责在运行时动态加载插件 DLL。ItAssetTool.Plugins: 插件库。包含了所有实际的业务逻辑实现(如ScanCpu.cs,SyncSnipeIT.cs,HealthCheckDiagnosticPlugin.cs等)。ItAssetTool: 主应用程序。负责所有 UI (Views)、ViewModels、窗口管理 (MainWindow.xaml) 和 DI 容器的配置 (App.xaml.cs)。
- MVVM (Model-View-ViewModel): 使用
CommunityToolkit.Mvvm库实现,彻底分离了UI (.xaml) 和业务逻辑 (.csViewModel)。 - 依赖注入 (Dependency Injection): 通过
Microsoft.Extensions.DependencyInjection统一管理所有 ViewModel 和服务(如ILogger)的生命周期。 - 插件化架构 (Plugin-Based Architecture): 核心扫描功能(
IScanPlugin等)由PluginManager在运行时动态加载ItAssetTool.Plugins.dll。 - 工具箱模式 (Toolbox Pattern): 新的运维功能(如打印机修复、系统清理)作为独立的 Page/ViewModel 对,在
App.xaml.cs中注册,并通过NavigationView(MainWindow.xaml) 和MapsToPage(MainWindow.xaml.cs) 进行导航。
System.Management: 用于通过 WMI 获取底层硬件信息。System.ServiceProcess.ServiceController: 用于管理 Windows 服务(如打印机 Spooler)。Microsoft.Win32.Registry: 用于执行注册表修复操作。Serilog: 用于强大的结构化日志记录,输出到文件和调试窗口。ClosedXML: 用于创建和操作 Excel (.xlsx) 文件。QuestPDF: 用于生成专业、美观的 PDF 文档。CommunityToolkit.WinUI.UI.Controls: 提供高级 UI 控件,如DataGrid(软件列表) 和GridSplitter(可拖动布局)。
本项目被设计为易于扩展。要添加一个像“打印机修复”或“系统清理”这样的新工具页面,请遵循以下 8 步模式:
-
(可选) 在
ItAssetTool.Core中创建数据模型: 如果您的工具需要新的数据结构(如CleanupItem),请在此项目中定义它。 -
在
ItAssetTool/ViewModels中创建 ViewModel: 创建一个新的.cs文件 (例如MyToolViewModel.cs),继承ObservableObject,并在此处编写所有 C# 逻辑(按钮命令、数据加载等)。 -
在
ItAssetTool/Views中创建 View (XAML): 创建一个新的Page(例如MyToolPage.xaml),并使用x:Bind将其 UI 元素绑定到 ViewModel 的属性上。 -
在
ItAssetTool/Views中创建 View-behind (XAML.cs): 创建对应的MyToolPage.xaml.cs文件。在构造函数中,从App.Services获取 ViewModel 实例并将其设置为this.DataContext。 -
在
App.xaml.cs中注册 ViewModel: 在ConfigureServices方法中,添加services.AddTransient<MyToolViewModel>();。 -
在
ItAssetTool.csproj中注册 View: 添加<Page Update="Views\MyToolPage.xaml"><Generator>MSBuild:Compile</Generator></Page>。 -
在
MainWindow.xaml中添加菜单项: 添加一个新的<NavigationViewItem Content="我的工具" Tag="MyToolPage" Icon="..."/>。 -
在
MainWindow.xaml.cs中添加导航逻辑: 在MapsToPage方法的switch语句中,添加case "MyToolPage": return typeof(MyToolPage);。
-
Snipe-IT 配置 (
profiles.json): 首次运行后,应用会在程序运行的根目录 (与.exe文件同级) 自动创建一个profiles.json文件。您必须通过应用内的 “配置” 页面 来图形化地管理 Snipe-IT 的连接信息。- 关键字段:
InternalUrl/ExternalUrl,ApiKey。 - ID 映射: 必须正确配置
CATEGORY_ID_MAP和COMPONENT_CATEGORY_ID_MAP,使其与您的 Snipe-IT 实例中的类别 ID 一致。
- 关键字段:
-
扫描配置 (
snipeit_config.json): 此文件 位于程序根目录,用于定义扫描时需要忽略的设备关键字 (如virtual,vmware等)。
-
克隆仓库:
git clone [https://github.com/axuan9945/asset-sonar.git](https://github.com/axuan9945/asset-sonar.git) cd asset-sonar -
打开解决方案: 使用 Visual Studio 2022 (或更高版本) 打开
ItAssetTool.sln文件。- 确保已安装 .NET 桌面开发 和 通用 Windows 平台开发 工作负载。
-
恢复依赖: Visual Studio 应该会自动恢复所有 NuGet 包。
-
运行项目:
- 在 Visual Studio 的顶部工具栏中,选择
ItAssetTool (Unpackaged)作为启动项目。 - [重要] 由于“打印机修复”、“系统清理”和“已安装软件”工具需要访问受保护的系统资源(服务、注册表、系统文件夹),您必须以管理员身份运行 Visual Studio 才能使所有功能正常工作。
- 点击 "运行" 按钮 (或按 F5)。
- 在 Visual Studio 的顶部工具栏中,选择
本项目采用 GNU General Public License v3.0 许可证。详情请参阅 LICENSE.txt 文件。
- CommunityToolkit.Mvvm: 极大地简化了 MVVM 模式的实现。
- CommunityToolkit.WinUI.UI.Controls: 提供了强大的
DataGrid和GridSplitter控件。 - ClosedXML: 提供了强大而易用的 Excel 文件操作功能。
- QuestPDF: 一个出色、简洁的 .NET PDF 生成库。
- 所有为 .NET 和 Windows App SDK 生态系统做出贡献的开发者们。