首页 > 其他分享 >桌面运维工具之打印机驱动安装

桌面运维工具之打印机驱动安装

时间:2024-09-12 15:35:35浏览次数:12  
标签:DevCon 打印机 桌面 string 运维 驱动 安装 ID

1.前言

桌面运维同学经常会处理打印机驱动安装这类工单,手动安装打印机驱动通常包含以下步骤:

1.根据打印机型号网上查找对应打印机驱动

2.使用cmd命令进入管理员界面

3.将打印机驱动添加到window系统中

人工安装需要经过三个步骤,操作繁琐,效率较低。基于此,我们想开发一个自动化安装打印机驱动的程序,让用户可以自行安装打印机驱动,以此减少打印机驱动安装工单,提高运维效率。

2.技术实现

我们可以使用代码的方式实现人工操作的三个步骤。这里,我们程序上实现也和这三个步骤类似。

1.后台管理系统统一维护打印机驱动

2.使用程序提权,自动进入管理员环境

3.使用Devcon程序执行打印机驱动安装命令

后续的所有示例代码以C#为例。

2.1.后台管理系统

我们开发一个后台管理系统,统一维护打印机驱动,这样可以减少重复查找打印机驱动的工作,提升效率。

系统界面如下:

 

 

通过这个页面维护打印机型号、硬件ID和驱动等相关信息。

任何设备的硬件ID都是唯一的,我们可以通过程序识别打印机的硬件ID,然后根据硬件ID查询到驱动下载。

这里我们使用window的Win32_PnPEntity来获取硬件的相关信息,其结构如下:


[Dynamic, Provider("CIMWin32"), UUID("{FE28FD98-C875-11d2-B352-00104BC97924}"), AMENDMENT]
class Win32_PnPEntity : CIM_LogicalDevice
{
  uint16   Availability;
  string   Caption;
  string   ClassGuid;
  string   CompatibleID[];
  uint32   ConfigManagerErrorCode;
  boolean  ConfigManagerUserConfig;
  string   CreationClassName;
  string   Description;
  string   DeviceID;
  boolean  ErrorCleared;
  string   ErrorDescription;
  string   HardwareID[];
  datetime InstallDate;
  uint32   LastErrorCode;
  string   Manufacturer;
  string   Name;
  string   PNPClass;
  string   PNPDeviceID;
  uint16   PowerManagementCapabilities[];
  boolean  PowerManagementSupported;
  boolean  Present;
  string   Service;
  string   Status;
  uint16   StatusInfo;
  string   SystemCreationClassName;
  string   SystemName;
};

其中Name表示硬件名称,HardwareID表示硬件id。

打印机硬件ID识别部分代码如下:


namespace JwPrinterManage.Helper
{
    internal class USBUtilTest
    {
        public static List<USBDeviceInfo> GetAllPrinterUsbList()
        {
            List<USBDeviceInfo> list = new List<USBDeviceInfo>();

            ManagementObjectCollection collection;
            using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnPEntity"))
                collection = searcher.Get();

            foreach (ManagementObject device in collection)
            {

                string name = Convert.ToString(device["Name"]);
                string deviceId = Convert.ToString(device["DeviceID"]);
                string[] HardwareIDArr = (string[])device["HardwareID"];
                if (HardwareIDArr == null || HardwareIDArr.Length == 0)
                {
                    continue;
                }
                foreach (var curHardwareId in HardwareIDArr)
                {
                    if (curHardwareId.Contains("USBPRINT"))
                    {
                        list.Add(new USBDeviceInfo(curHardwareId, name));
                    }
                }
            }

            collection.Dispose();
            return list;
        }
    }
}

以上代码可以获取到计算机的所有硬件名称、设备ID以及硬件ID,通过此方法,我们可以快速获取打印机的硬件ID,然后根据硬件ID从后台系统中查找驱动并下载到用户本地。

2.2.程序提权

安装打印机驱动,程序需要具有管理员权限,这里我们需要通过cmd命令给程序提权,保证程序具有管理员权限。

其原理是使用管理员账号和密码执行cmd运行程序,这样程序就具有管理员权限。

部分核心代码如下:


namespace JwPrinterManage.Helper
{
    internal class AdminUtilsTest
    {

        // 使用特定账号和密码运行程序
        private static void run(string userName, string pass, string exePath)
        {
            Process process = new Process();
            string str = pass;
            SecureString secureString = new SecureString();
            foreach (char c in str)
                secureString.AppendChar(c);
            process.StartInfo.UserName = userName;
            process.StartInfo.Password = secureString;
            process.StartInfo.FileName = exePath;
            process.StartInfo.UseShellExecute = false;
            process.Start();
        }
    }
}

2.3.使用Devcon安装驱动

2.3.1.Devcon.exe简介

DevCon (Devcon.exe)(即设备控制台)是一种命令行工具,用于显示有关运行 Windows 的计算机上的设备的详细信息。 可以使用 DevCon 启用、禁用、安装、配置以及删除设备。

其主要语法如下:


devcon [/r] command [arguments]

其主要命令如下:

•DevCon Enable

•DevCon Disable

•DevCon Update

•DevCon UpdateNI

•DevCon Install

•DevCon Remove

•DevCon Rescan

•DevCon Restart

•DevCon Reboot

•DevCon SetHwID

•DevCon ClassFilter

•DevCon Dp_add

•DevCon Dp_delete

这里我们不详细介绍这些命令,感兴趣的同学可以查看官方文档: Devcon命令文档

2.3.2.Devcon命令安装驱动

我们可以使用update命令来安装打印机驱动程序,devcon update命令可以安装任意驱动程序包,具体如下:


devcon update INFfile HardwareID

其中INFfile表示打印机驱动的INF文件,HardwareID表示打印机的硬件ID。

当出现如下图所示的结果时,表示打印机驱动安装成功。

 

 

3.总结

本文主要介绍打印机驱动自动化安装的一个基本实现思路,通过运维工具,我们可以实现部分桌面工单自动化,帮助运维同事提高工作效率。同时,本文也介绍了通过Win32_PnPEntity获取window硬件信息以及通过Devcon命令安装驱动的方法,这两个方法不仅限于打印机驱动安装的应用,其实际应用场景比较广泛,大家可以通过这些方法开发自动化工具,帮助提高运维工作效率。

标签:DevCon,打印机,桌面,string,运维,驱动,安装,ID
From: https://www.cnblogs.com/Jcloud/p/18410300

相关文章

  • 为什么说运维工程师做不长久,做两年就赶快转网络安全或者研发
    前言很多从事IT网络运维工作的年轻小伙伴都会有个疑问,自己做的工作很杂似乎很基础,而且重复很多年,究竟有没前途。作为过来人告诉一个总结:前途大小,工资多少跟你的岗位和职称资质没有多少关系,跟你的经验技能和平台有关系。我今天来详细讨论下IT运维工程师的出路在哪里。IT运......
  • 一个伙伴工程师的10年云桌面心得
     一、10年前初识云桌面 2011年,我接触到了云桌面,当时我参与实施了2个云桌面项目,XX银行云桌面项目,XX石油云桌面项目,我都是负责NAS存储实施,同时配合VDI云桌面实施。 实施团队全部来自原厂(由IBM咨询部统筹),两个项目基本是同一波人马,我跟他们仔细讨论过方案,技术细节,实施遇到问......
  • 探索网络安全与运维:豆瓣高分图书推荐
         国内首部日志分析专著《UNIX/Linux网络日志分析与流量监控》已畅销十年,口口相传的经典力作,被清华大学等高校分享作为研究生学习读本,历经多次重印,销量突破10万册。不仅被国内400多所高校(包括港、澳、台地区高校)收藏,远销欧美等国,还被国内多本计算机专业图书和核心期刊......
  • JAVA运维总结篇
    写这篇文章主要目的是完成自己多年来运维JAVA应用的一个总结,相当于个人知识库,以后工作中遇到问题便于临时查阅并不断完善自己的知识体系。 Tomcat是一个开箱即用的软件,配置java环境变量即可把Tomcat进程运行起来,但要投入生产环境,有哪些需要注意的呢?(1)、性能,默认的Tomcat配置可以正......
  • 软件项目管理资料总汇(开发#实施#运维#安全#交付)
      前言:在软件项目管理中,每个阶段都有其特定的目标和活动,确保项目的顺利进行和最终的成功交付。以下是软件项目管理各个阶段的详细资料:软件项目管理部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书......
  • 局域网共享打印机问题集
    下方统一说明:直接连接打印机电脑——>A主机需要连接打印机电脑——>B主机1、A主机为32位系统,B主机为64位系统,B主机连接时一直提示windows更新,找不到驱动的情况解决:A主机上找到打印机共享页面,选择其他驱动程序,将64位驱动勾选上,找到对应打印机相应64位驱动程序下载,安装好,B主机重新正......
  • Windows远程桌面授权远程代码执行漏洞CVE-2024-38077(POC、EXP)
    目录漏洞描述关键信息漏洞影响漏洞危害等级影响范围漏洞解决方案临时缓解方案升级修复方案POCEXP使用参考漏洞描述CVE-2024-38077是Windows远程桌面授权服务(RDL)中的一个堆溢出漏洞。该漏洞在解码用户输入的许可密钥包时,未正确验证解码后的数据长度与缓冲区......
  • 组策略统一在桌面显示计算机图标
    可以通过注册表修改实现桌面默认显示相应图标。域环境下,桌面统一显示计算机,文档,网络图标:新建GPO,用户配置--注册表---更新,建立以下内容。显示用户的文件REGADDHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel {59031a47-3f72-44a7......
  • 【Canvas与电脑桌面】用六角回旋镖铺满一个平面(1920*1080)
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>六角回旋镖桌面1920x1080</title><styletype=&......
  • 桌面玩具
    也许能做成游戏?合成器/dwmLinux一开始是因为weston有个Win+鼠标中键可以旋转窗口的特性,挺搞笑但又很好玩Linux做DIY合成器有很多开源项目可以参考,不像其他OS那么难。故优先考虑linux一些支持Wayland的DE:Gentoowiki一些主流的DE:NixOSwiki已有点子vulkanwayland合成......