我正在寻找存储在Windowsregistry中的唯一GUID,这将帮助我识别Windows安装或PC。
GUID必须;
非常感谢
如果该安装的驱动器移动到另一个系统,您是否希望这个数字改变或保持不变?
如果安装克隆了鬼或其他东西,你希望这个数字被改变吗? 你能否依赖微软推荐的克隆系统? SID应该没问题,如果你能确定你的安装从不克隆。
在多引导系统(即系统具有Windows 7和Windows XP安装)的情况下,您是否需要将两个安装标识为唯一或相关的或者是什么?
为什么你需要把它作为Windows安装的一部分,而不是硬件,也许是处理器的序列号 ?
我假设您正在询问有关用于库存目的的某种脚本或工具?
为什么不在第一次运行该工具时将自己的编号生成并保存在LOCAL_MACHINEregistryconfiguration单元中? 也许甚至使用一个RFC4122types1号码,并且应该包括一个networking接口的硬件地址。 这样,您可以通过比较UUID和当前networking适配器来检查UUID是否仍然属于该系统。
您可以从Windowsregistry获得GUID,例如:
var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\MachineGuid"; var oWSS = new ActiveXObject("WScript.Shell"); clientGUID = oWSS.RegRead(regpath);
您想要使用Windows产品ID。 这是从安装的产品密钥部分生成(散列)的唯一编号,部分来自硬件configuration(包括来自第一个NIC的处理器序列号和MAC地址)。 您可以阅读关于它(有点过时,但仍然有效)的TechNet文章 。 产品ID可以在“系统信息”屏幕上find,或者通过几种方法以编程方式find。

假设这是一个Windows服务器,有一篇关于如何从Win2k中解脱出来的知识库文章: KB224544 。
我不知道如果LDP.exe仍然像这样操作,但它可能。
我不太确定像你所描述的GUID值是否存在。 通常的做法是使用CPU或主板ID信息。
这是一个包含一些相关的WMI脚本代码的论坛post的链接: http : //www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic59274.aspx
如果你正在寻找一个Windows安装,那么你可能会运气不好。 在企业环境中,工作站往往是成像的,而不是安装。 从这个图像构build的每台计算机将是相同的。
与您所描述的最接近的是机器的SID,但是这不起作用有两个原因:
你需要什么标识符? 如果可能的话,你最好的select可能是自己创build。
您可以尝试MAC地址,至less意图是全球唯一和永久的。 这也有一个很好的优点,你可以获得一台机器的IP和主机名,而不必太费心(也不会被限制在Windows中)。 它不符合您在registry中的要求,但是您可以使用WMI代替它。
示例脚本在这里: http : //www.winforums.com/showthread.php? t= 8842
系统音量的DriveId如何? 您可以通过使用SystemVolume True查找条目,从Win32_Volume WMI类中获取该ID。
在PowerShell中:
gwmi win32_volume -filter 'SystemVolume=true' | ft -a DriveLetter,SystemVolume,DeviceId
(这当然可以被远程使用。)
有一个SID使用的Windows更新,您可能可以使用。 再次不能保证它每次都是唯一的,或者它不会改变。
我认为最接近满足您的需求的是MAC地址,但是如果NIC被replace,可能会改变。
你最好的办法是将自己的GUID写入registry并使用它。
要确认特定计算机上的计算机SID,可以运行SysInternals PSGETSID%COMPUTERNAME%$。 (域SID)。
http://blogs.msdn.com/aaron_margosis/archive/2009/11/05/machine-sids-and-domain-sids.aspx
编辑:删除对registry中的机器SID的引用,这可能不是唯一的(甚至是正确的)。
为什么不使用计算机名称? 它将在你的域中是唯一的,所有的Windows安装都有一个,只有当一个域名pipe理员改变它时,它才会被改变,除非做出更正。
我也需要find一种全球唯一标识Windows安装的方法。 首先,为了正确分类和识别备份映像,并确定在哪些机器上恢复哪些映像。 其次,为了命名用于同步文件的同步对,并根据同步中涉及的机器来确定使用哪个同步对。
在阅读了几篇文章(包括本网站上的文章)之后,我得出结论:findWindows安装的全球唯一标识符并不容易。 那太糟糕了。 像硬件一样,软件也应该有自己的序列号。 好吧! 所以这是我的解决方法:我没有find一个全球唯一的标识符,而是创build了一个sylized语句,这个语句的灵感来自微软在Windows上命名networking驱动器的方式以及它在虚拟PC中命名共享文件夹的方式:“[WINDOWS PRODUCT ID( 作为variables )]安装在[COMPUTER SERIAL NUMBER( as variable )]。“ 尽pipe只有相应的产品密钥才具有唯一的Windows生产标识号码,但是在多个安装中,特别是在包含工厂安装的Windows的批量生产的计算机上,它是相同的,但是序列号是唯一的,从一台机器到另一台机器是不同的。 上述的公式就是我所需要的; 我不需要SID(我认为它表示安全标识符 )或其他更复杂的东西,因为这两个variables的组合完全参照我需要识别的Windows安装,而每个variables本身并不是用于我。 具体而言,首先,由于我拥有几台相同的机器,所以在同一制造商生产的计算机上,Windows产品标识是相同的,并且在同一产品系列中find并且没有任何用途。 其次,序列号不足以唯一标识,因为我在一台计算机上安装了几个计算机序列号不能解决的Windows安装。 因此,我build议我的方法。
另外,在您询问之前:我select不将我的方法基于计算机名称。 这些信息是基于用户的,因此需要进行盘点。 但是,Windows产品标识和计算机序列号已经被识别,盘点并且总是与两个特定产品连接,从而消除了再次盘点它们的需要。 我不会select使用硬盘驱动器的唯一标识符来识别Windows安装,因为我可以很容易地将它们从一台机器切换到另一台机器,尤其是当驱动器容量处于不断变化的状态时。 同样的道理,我更less使用中央处理单元或主板的识别命名,正如Shoeless先前在回复中所build议的那样。 最后,我也拒绝了识别Windows安装的最明显的select(尽pipe它没有被我能看到的任何人提及):使用产品密钥。 虽然它是唯一的,但它只是安装某个版本的Windows的许可证; 它实际上并没有连接到一个特定的Windows安装,它并没有区分它被安装在一台特定的机器上,即使许可证是通过购买给定的计算机来授予的。