Recherche d'un GUID unique pour identifier une installation Windows

15

Je recherche un GUID unique stocké dans le registre Windows qui pourrait m'aider à identifier une installation Windows ou un PC.

Le GUID doit;

  • Existe toujours
  • Être unique pour une installation particulière de Windows, c'est-à-dire qu'aucun autre ordinateur n'aurait le même ID
  • Ne change jamais

Merci beaucoup

user28967
la source
Pourquoi publier sur SF et SU? superuser.com/questions/82484/…
MDMarra

Réponses:

8

Vous pouvez obtenir le GUID du registre Windows, par exemple:

var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\MachineGuid";
var oWSS = new ActiveXObject("WScript.Shell");
clientGUID = oWSS.RegRead(regpath);
friednail
la source
votre code est-il en C # ou dans un autre langage de programmation?
Tim
C'est JavaScript que j'ai utilisé dans le gadget Windows 7.
friednail
1
C # et Javascript ont-ils des syntaxes très similaires?
Tim
Désolé, je ne peux pas vous le dire, je ne connais pas C #. Ce ne sont que 3 lignes d'un code simple, elles contiennent une définition de variable, un littéral de chaîne, la création d'un nouvel objet et l'utilisation d'une notation par points pour accéder à la méthode d'un objet. Il existe probablement des tonnes d'autres structures de code pour comparer les langues.
friednail
@Tim, je suppose que vous êtes intéressé par la lecture des clés de registre en C #? Si oui, peut-être que cette question SO vous sera utile
friednail
7

Vous attendez-vous à ce que ce nombre change ou reste le même si le lecteur pour cette installation est déplacé vers un autre système?

Vous attendez-vous à ce que ce nombre soit modifié si l'installation est clonée avec fantôme ou autre chose? Pouvez-vous compter sur des systèmes clonés toujours sysprep'd suivant les recommandations de Microsoft? Le SID devrait être correct, si vous pouvez être sûr que vos installations ne sont jamais clonées.

Dans le cas d'un système à amorçage multiple (c'est-à-dire que le système a Windows 7 et une installation de Windows XP) devez-vous identifier les deux installations comme uniques ou liées ou quoi?

Pourquoi avez-vous besoin que cela fasse partie de l'installation de Windows, et non quelque chose présenté par le matériel, peut-être le numéro de série du processeur ?

Je suppose que vous demandez à ce sujet une sorte de script ou d'outil que vous utilisez à des fins d'inventaire?

Pourquoi ne générez-vous pas simplement votre propre numéro la première fois que vous exécutez l'outil et l'enregistrez dans la ruche de registre LOCAL_MACHINE? Peut-être même utiliser un numéro RFC4122 Type 1 et qui devrait inclure l'adresse matérielle pour l'une des interfaces réseau. De cette façon, vous pouvez vérifier si l'UUID appartient toujours à ce système en comparant l'UUID aux adaptateurs réseau actuels.

Zoredache
la source
2

Vous souhaitez utiliser l'ID de produit Windows. Il s'agit d'un numéro unique généré (haché) en partie à partir de la clé de produit installée et en partie à partir de la configuration matérielle, y compris le numéro de série du processeur et l'adresse MAC du premier NIC. Vous pouvez en lire plus sur cet article TechNet (quelque peu daté, mais toujours valide) . L'ID du produit peut être trouvé sur l'écran Informations système, ou par programme via plusieurs méthodes.

Informations système

tfrederick74656
la source
Le registre qui détient la licence de la fenêtre des utilisateurs se trouve à: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion, aucune
astuce
0

En supposant qu'il s'agit d'un serveur Windows, il existe un article de la base de connaissances qui explique comment le retirer de Win2k: KB224544 .

Je ne sais pas si LDP.exe fonctionne toujours comme ça, mais c'est possible.

Matt Simmons
la source
Cet article s'applique uniquement aux contrôleurs de domaine.
MDMarra
Merci pour l'information, je cherche un GUID qui existerait sur toutes les versions de Windows, XP et supérieur
user28967
0

Si vous cherchez à identifier une installation Windows, vous n'avez peut-être pas de chance. Dans les environnements d'entreprise, les postes de travail sont souvent imagés plutôt qu'installés. Chaque ordinateur construit à partir de cette image sera identique.

La chose la plus proche de ce que vous avez décrit est le SID de la machine, mais cela ne fonctionne pas pour deux raisons:

  1. Les machines Windows XP imagées ont le même SID, sauf si vous exécutez NewSID contre elles, ce que beaucoup de gens n'ont pas.
  2. Tous les contrôleurs de domaine sur un seul domaine partagent le même SID de la machine.

Pourquoi avez-vous besoin de cet identifiant? Votre meilleur pari peut être de générer le vôtre, si cela est possible.

Stephen Jennings
la source
1
Si les machines sont syspreps après la création d'image, le SID sera différent. S'ils ne le sont pas (ce qui, trop souvent, ils ne le sont pas), les SID seront les mêmes.
mrdenny
0

Vous pouvez essayer l'adresse MAC, qui est au moins destinée à être unique et permanente à l'échelle mondiale. Cela aurait également l'avantage de pouvoir obtenir l'IP et le nom d'hôte d'une machine sans trop de peine (et cela ne serait pas non plus limité à Windows). Il ne répondrait pas à votre exigence d'être dans le registre, mais vous pouvez utiliser WMI pour cela à la place.

Exemples de scripts ici: http://www.winforums.com/showthread.php?t=8842

Maximus Minimus
la source
0

Que diriez-vous du DriveId du volume système? Vous pouvez obtenir l'id de la Win32_Volumeclasse WMI, en recherchant des entrées avec SystemVolume True.

Dans PowerShell:

gwmi win32_volume -filter 'SystemVolume=true' | ft -a DriveLetter,SystemVolume,DeviceId

(Cela peut bien sûr être déporté.)

Richard
la source
0

Il y a un SID utilisé par Windows Update que vous pourriez utiliser. Encore une fois, rien ne garantit qu'il sera unique à chaque fois ou qu'il ne changera pas.

Je pense que la chose la plus proche de répondre à vos besoins serait l'adresse MAC, mais cela pourrait changer si la carte réseau était remplacée.

Le mieux serait d'écrire votre propre GUID dans le registre et de l'utiliser.

mrdenny
la source
0

Pour confirmer le SID de la machine sur une machine particulière, vous pouvez exécuter SysInternals PSGETSID% COMPUTERNAME% $. (SID de domaine).

http://blogs.msdn.com/aaron_margosis/archive/2009/11/05/machine-sids-and-domain-sids.aspx

EDIT: Suppression des références au SID de la machine dans le registre, qui peuvent ne pas être uniques (ni même correctes).

Greg Askew
la source
Oh allez, si vous modifiez quelqu'un, laissez au moins un commentaire et faites-lui savoir ce qui ne va pas.
Matt Simmons
Les SID de la machine ne sont pas garantis d'être uniques: blogs.technet.com/markrussinovich/archive/2009/11/03/…
pause jusqu'à nouvel ordre.
@Dennis - à droite. Donc, si c'est sur un domaine: psgetsid.exe% computername% $ produirait un identifiant unique.
Greg Askew
@Greg: Et si vous construisez vos postes de travail à partir d'images? Si vous n'avez pas exécuté newsid, ils partageront tous le même SID de la machine.
Stephen Jennings
@Stephen - L'utilisation du domaine SID résoudrait ce problème. blogs.msdn.com/aaron_margosis/archive/2009/11/05/…
Greg Askew
-1

Pourquoi ne pas simplement utiliser le nom de l'ordinateur? Cela va être unique au sein de votre domaine, toutes les installations Windows en ont un et ne changeront que si un administrateur de domaine le change, ce qui ne devrait jamais être nécessaire sauf si vous effectuez une correction.

Shial
la source
-2

Moi aussi, j'ai besoin de trouver un moyen d'identifier de manière unique et globale les installations Windows. Premièrement, afin de classer et d'identifier correctement les images de sauvegarde et de déterminer celles qui seront récupérées sur quelles machines. Deuxièmement, afin de nommer les paires de synchronisation pour la synchronisation des fichiers et de déterminer la paire de synchronisation à utiliser en fonction des machines impliquées dans la synchronisation.

Après avoir lu plusieurs articles, y compris ceux de ce site Web, je conclus qu'il n'y a pas de moyen facile de trouver un identifiant globalement unique d'une installation Windows. C'est dommage. Comme le matériel, le logiciel doit également avoir son propre numéro de série. Tant pis! Voici donc ma solution: au lieu de trouver un identifiant unique globalement unique, j'ai créé une déclaration sylisée, qui s'inspire de la façon dont Microsoft nomme les lecteurs réseau sous Windows et la façon dont il nomme les dossiers partagés dans Virtual PC: "[WINDOWS ID PRODUIT (en tant que variable )] Installé sur [NUMÉRO DE SÉRIE DE L'ORDINATEUR (en tant que variable)"]." Bien qu'un numéro d'identification de production Windows ne soit unique que dans la mesure où la clé de produit correspondante l'est, il est néanmoins susceptible d'être le même sur plusieurs installations, en particulier sur les ordinateurs produits en série contenant Windows installé en usine, mais une série le numéro est unique et différent d'une machine à l'autre. La formule mentionnée ci-dessus est tout ce dont j'ai besoin pour mes besoins; je n'ai pas besoin du SID (je suppose qu'il signifie Security Identifier) ou quelque chose de plus complexe, car la combinaison des deux variables fait exactement référence à l'installation de Windows que je dois identifier, alors que chaque variable individuelle ne me sert à rien. Plus précisément et tout d'abord, l'identification du produit Windows est identique sur les ordinateurs fabriqués par le même fabricant et trouvés dans la même gamme de produits et cela ne me sert à rien, car je possède plusieurs machines identiques. Deuxièmement, le numéro de série n'est pas suffisamment unique, car j'ai plusieurs installations Windows sur un ordinateur qu'un numéro de série d'ordinateur ne traite pas. Je suggère donc ma méthode.

Aussi, et avant de vous renseigner à ce sujet: j'ai choisi de ne pas baser ma méthode sur le nom de l'ordinateur. Les informations sont basées sur l'utilisateur et doivent donc être inventoriées. Cependant, l'identification du produit Windows et le numéro de série de l'ordinateur sont déjà identifiés, inventoriés et invariablement connectés à deux produits spécifiques, éliminant ainsi la nécessité de les inventorier à nouveau. Je ne choisirais pas non plus d'identifier une installation Windows avec un identifiant unique de disques durs, car je suis capable et tout à fait apte à les faire passer d'une machine à une autre, surtout lorsque les capacités des disques sont en constante évolution. De même, j'utiliserais beaucoup moins la nomenclature d'identification de l'unité centrale ou de la carte mère, comme cela a été suggéré jusqu'à présent dans une réponse précédente de Shoeless.. Enfin, je rejette également l'option la plus évidente d'identifier une installation Windows (bien qu'elle n'ait été mentionnée par personne d'autre d'après ce que je peux voir): utiliser la clé de produit. Bien qu'il soit unique, ce n'est qu'une licence pour installer une certaine version de Windows; il n'est pas réellement connecté à une installation Windows particulière et il ne le distingue pas comme étant installé sur une machine particulière, même si la licence a été accordée en vertu de l'achat d'un ordinateur donné.

Neal Bangia
la source
3
Et votre réponse à la question est ...?
Deer Hunter