翻译《The Old New Thing》- How do I obtain the computer manufacturer’s name?

How do I obtain the computer manufacturer's name? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20081218-00/?p=19783

Raymond Chen 2008年08月08日


如何获取计算机制造商的名字?

        一位客户想要一种方法来确定计算机制造商的名称。例如,他们想要通过某种函数调用并得到返回结果“IBM”、“Compaq”或“Dell”。

        我不知道他们为什么想要这些信息,目前我也不关心。

        当然,当你寻找信息时,你不会去搜索 MSDN;那是疯狂的人会做的事情。不,让我们直接启动注册表编辑器(regedit)并按 Ctrl+F(搜索)。

我无法想象有多少应用程序兼容性错误是由注册表编辑器中那个“有用”的 Ctrl+F 对话框造成的。

        客户找到了用于自定义系统控制面板的注册表键,以及也参与其中的 OEMINFO.INI 文件。但随后出现了可靠性问题。

        毕竟,由于它只是一个注册表键和一个 INI 文件,用户可以编辑它并让它显示任何他们想要的内容。

        如果客户擦除了他们的硬盘并从头开始重新安装 Windows,那么这些信息也会丢失。

        这位客户想要某种程度的保证,即如果计算机声明它是 Dell,那么它确实是 Dell。

        进入 WMI(Windows 管理工具)。

        脚本团队对 WMI 非常熟悉。如果你搜索短语“from Win32_ComputerSystem”,你将从《嘿,脚本小子!》栏目中找到一次又一次的命中。

        恰好 WMI 也暴露了计算机制造商信息。

        如果你查看脚本团队发布的脚本,可能三分之二的脚本都遵循这种模式:

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select * from something“)
For Each objItem in colItemsWscript.Echo objItem.something
Next

我们所要做的就是填充“something”。

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select * from Win32_ComputerSystem“)
For Each objItem in colItemsWscript.Echo “System Name: ” & objItem.NameWscript.Echo “Manufacturer: ” & objItem.ManufacturerWscript.Echo “Model: ” & objItem.ModelWscript.Echo
Next

        好的,我们可以利用 WMI 获取这些信息。但它有多可靠呢?

        嗯,WMI 团队告诉我,他们通过直接查询 SMBIOS 来获取信息,所以它的可靠性和你的 BIOS 一样。

        主要制造商会把他们的名字写入 BIOS,但如果你是在家用机器上运行,那么这些值就是主板上附带的。

        BIOS 制造商通常会在他们的 SMBIOS 中放置占位符字符串,将制造商设置为一个通用字符串,比如“Manufacturer”。

        当主板制造商安装 BIOS 时,他们应该用更有意义的内容替换占位符字符串,但大多数制造商并不在意。

        结果是,你从当地电脑商店购买零件组装的机器,制造商很可能只会显示“Manufacturer”。

        总结来说,如果你查询 WMI 获取计算机制造商,如果返回“Dell”,那么你可以相当确定你有一台 Dell 计算机。

或者有人非常闲得无聊,烧录了一个自定义 BIOS,上面写着“Dell”。

        另一方面,如果返回的是“Manufacturer”,那么你就仍然不清楚。

        你所知道的只是你有某种通用计算机。

        即使主要制造商会把他们的名字写入 BIOS,我听说如果你把你的电脑送回制造商,他们更换主板时,有时会忘记在更换的主板的 BIOS 中烧录他们的名字。

        因此,即使是品牌计算机,你也可能看到“Manufacturer”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# .NET 异步实现方式

一、异步编程模式 .NET 提供了执行异步操作的三种模式: 基于任务的异步模式 (TAP) ,该模式使用单一方法表示异步操作的开始和完成。 TAP 是在 .NET Framework 4 中引入的。 这是在 .NET 中进行异步编程的推荐方法。 C# 中的 async 和 await 关键词以及 …

HTML+CSS+JS 密码灯登录表单

效果演示 实现了一个登录页面,包括一个标题、两个输入框(用户名和密码)、一个登录按钮和一个眼睛图标。点击眼睛图标可以显示或隐藏密码。页面背景有两个圆形的半透明元素,整个页面使用了flex布局,并且在水平和垂直方向上都居中对齐。登录框使用了阴影效果和圆角边框,并且…

linux centos redis-6.2.6一键安装及配置密码

linux centos redis-6.2.6一键安装及配置密码 redis基本原理一、操作阶段,开始安装 redis基本原理 redis作为非关系型nosql数据库,一般公司会作为缓存层,存储唯一会话id,以及请求削峰作用 一、数据结构 Redis支持多种数据结构&a…

【AI时代,生命修行】

今日分享📒,AI时代, 生命 与 修行: 不要用太多时间去工作,尤其是在人工智能时代。如果谁还在用传统的线性的费时间的这种努力的工作方式,只能说太落伍了。 我只说给同频的朋友们无关的人请划走。因为很多…

JVM类加载机制详解(JDK源码级别)

提示:从JDK源码级别彻底剖析JVM类加载机制、双亲委派机制、全盘负责委托机制、打破双亲委派机制的程序、Tomcat打破双亲委派机制、tomcat自定义类加载器详解、tomcat的几个主要类加载器、手写tomcat类加载器 文章目录 前言一、loadClass的类加载大概有如下步骤二、j…

Hadoop3:MapReduce源码解读之Map阶段的FileInputFormat的切片原理(2)

Job那块的断点代码截图省略,直接进入切片逻辑 参考:Hadoop3:MapReduce源码解读之Map阶段的Job任务提交流程(1) 4、FileInputFormat切片源码解析 切片入口 获取切片 获取切片最大的Size和切片最小的Size 判断文件是…

LeMeViT:具有可学习元令牌的高效ViT

本文提出使用可学习的元令牌来制定稀疏令牌,这有效地学习了关键信息,同时提高了推理速度。从技术上讲,主题标记首先通过交叉关注从图像标记中初始化。提出了双交叉注意(DCA)来促进图像令牌和元令牌之间的信息交换&…

SpringBoot2+Vue3开发课程审核流程系统

SpringBoot2Vue3开发课程审核流程系统 简介 此系统实现了课程审核全流程功能并使用了Activiti7工作流技术,功能包含:课程管理、用户管理、流程定义、课程审核(我的申请、我的代办、我的已办) 功能介绍 课程管理 对课程信息的管…

git凭证

默认是manager # 将凭证缓存到内存中,默认缓存15分钟 git config --global credential.helper cache# 将凭证存储到磁盘上的纯文本文件中 git config --global credential.helper store# 使用 Git 凭证管理器 git config --global credential.helper manager-core查…

【线性代数】向量空间,子空间

向量空间 设V为n维向量的集合,如果V非空,且集合V对于向量的加法以及数乘两种运算封闭,那么就称集合V为向量空间 x,y是n维列向量。 x 向量组等价说明可以互相线性表示 向量组等价则生成的向量空间是一样的 子空间 例题18是三位向…

【设计模式】行为型设计模式之 状态模式,带你探究有限状态机FSM的三种实现方式

什么是有限状态机 Finite state Machine FSM 简称状态机:状态机由三部分组成,状态(State) 事件(Event) 和动作(Action)组成。 其中事件也被称为转移条件,事件触发状态的转移和动作的执行。不过动作不是必须的,也可能只存在状态转…

全链路性能测试:Nginx 负载均衡的性能分析和调优

为什么性能测试很多同学觉得是一个比较难以自学上岸的测试领域,是因为真正做全链路的性能测试是比较难的。所谓的全链路就是在项目的整个链路上任何一环节都有可能存在性能测试瓶颈,我们都需要能够通过分析性能的监控指标找到对应的问题。 我们今天要讲的Nginx负载均衡就是…

C++中的一些困惑(长期更新中)

C中的一些困惑 文章目录 C中的一些困惑1. using std::具体命名与using namespace std;2. 【int \*p[10] 】与 【int (\*p)[10]】3. main()函数可带参,参从何来?4. constexpr函数的返回值可不为常量,那这时constexpr关键字作用是什么&#xff…

网页中生成ZIP文件,Zip 压缩、解压技术在 HTML5 浏览器中的应用

JSZip 是一款可以创建、读取、修改 .zip 文件的 javaScript 工具。在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这时候只需要做一次请求,这样既减少了服务器的压力&#xff0…

Python:处理矩阵之NumPy库(上)

目录 1.前言 2.Python中打开文件操作 3.初步认识NumPy库 4.使用NumPy库 5.NumPy库中的维度 6.array函数 7.arange函数 8.linspace函数 9.logspace函数 10.zeros函数 11.eye函数 前言 NumPy库是一个开源的Python科学计算库,它提供了高性能的多维数组对象、派生对…

11-数组与指针深入理解——题型理解

11-数组与指针深入理解——题型理解 文章目录 11-数组与指针深入理解——题型理解一、理解题1二、理解题二三、理解题三四、理解题四五、理解题五六、理解题六 一、理解题1 #include <stdio.h>int main(void) {int (*p)[5] NULL; // 定义一个指向 拥有5个整型数据的数组…

【Java】JDBC+Servlet+JSP实现搜索数据和页面数据呈现

目录 1 .功能介绍 2. 实现流程 3. 项目环境 4. 相关代码 4.1 Maven配置 4.2 SQL语句 4.3 Java代码 4.4 HTML代码 4.5 JSP代码 5. 结果展示 &#xff08;原创文章&#xff0c;转载请注明出处&#xff09; 博主是计算机专业大学生&#xff0c;不定期更新原创优质文章&…

Android 常用开源库 MMKV 源码分析与理解

文章目录 前言一、MMKV简介1.mmap2.protobuf 二、MMKV 源码详解1.MMKV初始化2.MMKV对象获取3.文件摘要的映射4.loadFromFile 从文件加载数据5.数据写入6.内存重整7.数据读取8.数据删除9.文件回写10.Protobuf 实现1.序列化2.反序列化 12.文件锁1.加锁2.解锁 13.状态同步 总结参考…

gitlabcicd-k8s部署runner

一.环境信息 存储使用nfs挂载持久化 k8s环境 helm安装 建议helm 3 二.部署gitlab-runner 1.查看gitlab版本 进入容器可通过执行&#xff1a;gitlab-rake gitlab:env:info rootgitlab-647f4bd8b4-qz2j9:/# gitlab-rake gitlab:env:info System information System: Current Us…

【面试干货】 Hash 索引和 B+树索引的区别

【面试干货】 Hash 索引和 B树索引的区别 1、Hash 索引2、B 树索引3、区别和适用场景 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库中&#xff0c;索引是一种重要的数据结构&#xff0c;用于加速查询操作。常见的索引包括 Hash 索…