.net 使用PowerShell获取电脑中的UUID
2016-06-27 18:32
357 查看
UUID含义是通用唯一识别码(UniversallyUniqueIdentifier),这是一个软件建构的标准,也是被
组成
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照-------以上内容摘自《百度百科》因为软件产品中需要与硬件码进行绑定,就想到了UUID,通过百度,网上搜索了一堆之后,发现大部分的代码都是如下:需要引用:System.Management;
stringprocessor="Win32_Processor";//类名 ManagementClassdriveClass=newManagementClass(processor); Console.WriteLine(driveClass.GetQualifierValue("UUID"));然后,让我们部门所有同事在各自的电脑上运行了一次,发现结果如下:
全部运行的结果都是相同的。(这是为什么呢??到现在我也不知道,但不甘心,继续搜Google)----------------------------------------------我是分隔线-----------------------------------------------功夫不负有心人,后来查资料发现,WindowsPowerShell也可以获取UUID,虽然对于PowerShell我也不熟悉,但核心是能不能解决我的问题?
WindowsPowerShell是一种命令行
首先,你必须保证操作系统上有PowerShell安装在您的系统上,另外Vs开发工程中需要引用System.Management.Automation.dll,
这个dll在我电脑以下路径里:“C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\”,
本机操作系统:Win7
核心的代码如下:
privatestaticstringGetUUID()
{try
{
stringuuid=string.Empty;
using(PowerShellPowerShellInstance=PowerShell.Create())
{PowerShellInstance.AddScript("(get-wmiobjectWin32_ComputerSystemProduct).UUID");//OKCollection<PSObject>PSOutput=PowerShellInstance.Invoke();
foreach(PSObjectoutputIteminPSOutput)
{
if(outputItem!=null)
{
uuid+=outputItem.BaseObject.ToString();
}
}
}
returnuuid;
}
catch
{
returnstring.Empty;
}
}
其调用其实就是使用PowerShell的Script进行获取。因为在调用PowerShell时,可能会比较的慢,.net中也提供了异步调用的机制。核心代码如下:
privatestaticstringGetAsyncUUID()
{
try
{
stringuuid=string.Empty;
using(PowerShellPowerShellInstance=PowerShell.Create())
{PowerShellInstance.AddScript("(get-wmiobjectWin32_ComputerSystemProduct).UUID");//OKPSDataCollection<PSObject>outputCollection=newPSDataCollection<PSObject>();
outputCollection.DataAdded+=outputCollection_DataAdded;
PowerShellInstance.Streams.Error.DataAdded+=Error_DataAdded;
IAsyncResultresult=PowerShellInstance.BeginInvoke<PSObject,PSObject>(null,outputCollection);while(result.IsCompleted==false)
{
Console.WriteLine("Waitingforpipelinetofinish...");
Thread.Sleep(1000);//While里面可以写上执行等待中的一些事情
}foreach(PSObjectoutputIteminoutputCollection)
{
if(outputItem!=null)
{
uuid+=outputItem.BaseObject.ToString();
}
}}
returnuuid;
}
catch
{
returnstring.Empty;
}}
staticvoidError_DataAdded(objectsender,DataAddedEventArgse)
{
Console.WriteLine("AnerrorwaswrittentotheErrorstream!");
}staticvoidoutputCollection_DataAdded(objectsender,DataAddedEventArgse)
{
Console.WriteLine("Objectaddedtooutput.");
}
以上代码运行之后,经过测试之后,部门没有重复的。结果如下:
暂时,从以上测试结果分析来看,这个方法是可行的。但目前仍然有比较担心的几个问题:
1、PowerShell在不同的版本里面,调用的方法会不会不一样?因为做为B/s软件需要考虑更多的Windows服务器?
比如:(get-wmiobjectWin32_ComputerSystemProduct).UUID
2、为了安全,PowerShell会不会被服务器给禁用?
3、因为B/s软件是需要IIS来运行的,会不会出现权限不足的情况??
希望有对WindowsPowerShell比较熟悉的朋友能指教一下。
另:本文仅作记录分享,脏水请勿乱吐!===============================补充:==========================================
后期经过大量测试发现:windowsServer2003使用PowerShell获取UUID,可能会报错,所以建议还是使用如下方式:
varc=newManagementClass("Win32_ComputerSystemProduct");
varinstance=c.GetInstances();foreach(variininstance)
Console.WriteLine(i["uuid"]);
相关文章推荐
- shell总结
- shell 中变量的介绍
- Jmeter中利用BeanShell Sampler与控制台进行交互
- shell脚本实例
- shell脚本实例
- 小代码 SHELL 30分钟 online
- [shell] getopts使用
- 05.Shell乾坤大挪移
- 简易的学生成绩管理:增删查
- Shell echo命令
- Shell数组:shell数组的定义、数组长度
- Shell字符串
- 重置gitlab管理员密码
- login shell 的配置文件读取流程
- Shell注释
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- Shell替换:Shell变量替换,命令替换,转义字符
- # linux shell常用快捷键
- 修改加粗cmd和powershell命令行的中文字体
- 03.关于Shell变量那些事