• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用PowerShell .Net获取电脑中的UUID

    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"); //OK
    CollectionPSObject> 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"); //OK
    PSDataCollectionPSObject> outputCollection = new PSDataCollectionPSObject>();
    outputCollection.DataAdded += outputCollection_DataAdded;
    PowerShellInstance.Streams.Error.DataAdded += Error_DataAdded;
    IAsyncResult result = PowerShellInstance.BeginInvokePSObject, 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的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • PowerShell中使用.NET将程序集加入全局程序集缓存
    • Powershell中可以使用的.Net实用静态方法
    • PowerShell入门教程之访问.Net程序集、COM和WMI实例
    • Powershell小技巧之查看安装的.Net framework版本信息
    • PowerShell中调用.NET对象的静态方法、静态属性和类方法、类属性例子
    • PowerShell中查看当前版本、Windows版本、.NET版本信息的代码
    • 一个ASP.Net下的WebShell实例
    • PowerShell 定时执行.Net(C#)程序的方法
    • ASP.NET下使用WScript.Shell执行命令
    • 如何使用 Shell 脚本执行 .NET Core 应用
    上一篇:ABP框架中导航菜单的使用及JavaScript API获取菜单的方法
    下一篇:ASP.NET web.config 配置节点详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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