侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

使用PowerShell .Net获取电脑中的UUID

人生(杂谈)  /  管理员 发布于 8年前   317

UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。

组成

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字

UUID由以下几部分的组合:

(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。

(2)时钟序列。

(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。

-------以上内容摘自《百度百科》

因为软件产品中需要与硬件码进行绑定,就想到了UUID,通过百度,网上搜索了一堆之后,发现大部分的代码都是如下:

需要引用:System.Management;

string processor = "Win32_Processor";//类名ManagementClass driveClass= new ManagementClass(processor);Console.WriteLine(driveClass.GetQualifierValue("UUID")); 

然后,让我们部门所有同事在各自的电脑上运行了一次,发现结果如下:

全部运行的结果都是相同的。(这是为什么呢??到现在我也不知道,但不甘心,继续搜Google)

----------------------------------------------我是分隔线-----------------------------------------------

功夫不负有心人,后来查资料发现,Windows PowerShell也可以获取UUID,虽然对于PowerShell我也不熟悉,但核心是能不能解决我的问题?

Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能。

它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。

首先,你必须保证操作系统上有PowerShell安装在您的系统上,另外Vs开发工程中需要引用 System.Management.Automation.dll, 这个dll在我电脑以下路径里:“ C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\”, 本机操作系统:Win7 核心的代码如下:

private static string GetUUID(){try{string uuid = string.Empty;using (PowerShell PowerShellInstance = PowerShell.Create()){PowerShellInstance.AddScript("(get-wmiobject Win32_ComputerSystemProduct).UUID"); //OKCollection<PSObject> PSOutput = PowerShellInstance.Invoke();foreach (PSObject outputItem in PSOutput){if (outputItem != null){uuid += outputItem.BaseObject.ToString();}}}return uuid;}catch{return string.Empty;}}

其调用其实就是使用PowerShell的Script进行获取。因为在调用PowerShell时,可能会比较的慢,.net中也提供了异步调用的机制。核心代码如下:

private static string GetAsyncUUID(){try{string uuid = string.Empty;using (PowerShell PowerShellInstance = PowerShell.Create()){PowerShellInstance.AddScript("(get-wmiobject Win32_ComputerSystemProduct).UUID"); //OKPSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();outputCollection.DataAdded += outputCollection_DataAdded;PowerShellInstance.Streams.Error.DataAdded += Error_DataAdded;IAsyncResult result = PowerShellInstance.BeginInvoke<PSObject, PSObject>(null, outputCollection);while (result.IsCompleted == false){Console.WriteLine("Waiting for pipeline to finish...");Thread.Sleep(1000);// While里面可以写上执行等待中的一些事情}foreach (PSObject outputItem in outputCollection){if (outputItem != null){uuid += outputItem.BaseObject.ToString();}}}return uuid;}catch{return string.Empty;}} static void Error_DataAdded(object sender, DataAddedEventArgs e){Console.WriteLine("An error was written to the Error stream!");}static void outputCollection_DataAdded(object sender, DataAddedEventArgs e){Console.WriteLine("Object added to output.");}

以上代码运行之后,经过测试之后,部门没有重复的。

结果如下:

 

暂时,从以上测试结果分析来看,这个方法是可行的。但目前仍然有比较担心的几个问题:

1、PowerShell在不同的版本里面,调用的方法会不会不一样?因为做为B/s软件需要考虑更多的Windows服务器? 比如: (get-wmiobject Win32_ComputerSystemProduct).UUID

2、为了安全,PowerShell会不会被服务器给禁用?

3、因为B/s软件是需要IIS来运行的,会不会出现权限不足的情况??

以上所述是小编给大家介绍的使用PowerShell .Net获取电脑中的UUID的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!


  • 上一条:
    又到这个点
    下一条:
    如果你有这33种症状了请离开电脑去走走吧!
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 学历:一种延缓就业设计,生活需求下的权衡之选(2个评论)
    • 戒毒的程序员Andreas Kling,全职开发操作系统6年后,决定转战浏览器(0个评论)
    • Gap Year:中国环境下的优缺点及建议(0个评论)
    • 翻墙与VPN软件的合理使用:劝告与建议(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-06
    • 2020-08
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客