Suchen Sie nach einer eindeutigen GUID, um eine Windows-Installation zu identifizieren

14

Ich suche nach einer eindeutigen GUID, die in der Windows-Registrierung gespeichert ist und mir hilft, eine Windows-Installation oder einen Windows-PC zu identifizieren.

Die GUID muss;

  • Immer existieren
  • Seien Sie für eine bestimmte Windows-Installation eindeutig, dh kein anderer Computer hat dieselbe ID
  • Nie ändern

Danke vielmals

user28967
quelle
Warum auf SF und SU posten? superuser.com/questions/82484/...
MDMarra

Antworten:

7

Erwarten Sie, dass sich diese Nummer ändert oder gleich bleibt, wenn das Laufwerk für diese Installation auf ein anderes System verschoben wird?

Erwarten Sie, dass diese Nummer geändert wird, wenn die Installation mit Ghost oder etwas anderem geklont wird? Können Sie sich darauf verlassen, dass geklonte Systeme immer gemäß den Empfehlungen von Microsoft sysprepiert werden? Die SID sollte in Ordnung sein, wenn Sie sicher sein können, dass Ihre Installationen niemals geklont werden.

Müssen Sie bei einem Multi-Boot-System (dh das System hat Windows 7 und eine Windows XP-Installation) die beiden Installationen als eindeutig oder verwandt identifizieren oder was?

Warum muss dies Teil der Windows-Installation sein und nicht die Hardware, möglicherweise die Seriennummer des Prozessors ?

Ich gehe davon aus, dass Sie diesbezüglich nach einem Skript oder Tool fragen, das Sie für Inventarisierungszwecke verwenden.

Warum generieren Sie nicht einfach Ihre eigene Nummer, wenn Sie das Tool zum ersten Mal ausführen, und speichern es in der Registrierungsstruktur LOCAL_MACHINE? Verwenden Sie möglicherweise sogar eine RFC4122-Nummer vom Typ 1, die die Hardwareadresse für eine der Netzwerkschnittstellen enthalten sollte. Auf diese Weise können Sie überprüfen, ob die UUID noch zu diesem System gehört, indem Sie die UUID mit den aktuellen Netzwerkadaptern vergleichen.

Zoredache
quelle
7

Sie können die GUID aus der Windows-Registrierung abrufen, zum Beispiel:

var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\MachineGuid";
var oWSS = new ActiveXObject("WScript.Shell");
clientGUID = oWSS.RegRead(regpath);
Friednail
quelle
Ist Ihr Code in C # oder einer anderen Programmiersprache?
Tim
Es ist JavaScript, das ich in Windows 7 Gadget verwendet habe.
Friednail
1
Haben C # und Javascript sehr ähnliche Syntaxen?
Tim
Entschuldigung, kann ich Ihnen nicht sagen, ich bin nicht mit C # vertraut. Dies sind nur drei Zeilen eines einfachen Codes. Sie enthalten eine Variablendefinition, ein Zeichenfolgenliteral, die Erstellung eines neuen Objekts und die Verwendung einer Punktnotation für den Zugriff auf die Methode eines Objekts. Wahrscheinlich gibt es Unmengen anderer Codestrukturen, mit denen Sprachen verglichen werden können.
Friednail
@ Tim, ich denke du bist daran interessiert, Registrierungsschlüssel in C # zu lesen? Wenn ja, vielleicht ist diese SO-Frage für Sie hilfreich
Friednail
2

Sie möchten die Windows-Produkt-ID verwenden. Dies ist eine eindeutige Nummer, die teilweise aus dem installierten Produktschlüssel und teilweise aus der Hardwarekonfiguration generiert (gehasht) wird, einschließlich der Seriennummer des Prozessors und der MAC-Adresse der ersten Netzwerkkarte. Sie können darüber in diesem (etwas veralteten, aber immer noch gültigen) TechNet-Artikel lesen . Die Produkt-ID kann auf dem Bildschirm Systeminformationen oder programmgesteuert über verschiedene Methoden abgerufen werden.

System Information

tfrederick74656
quelle
Die Registrierung, die die Benutzerfensterlizenz enthält, befindet sich unter: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion. Zum Lesen sind keine besonderen Tricks erforderlich
Walter Vehoeven,
0

Angenommen, es handelt sich um einen Windows-Server, gibt es einen Knowledge Base-Artikel, in dem erläutert wird, wie Sie ihn aus Win2k herausholen können: KB224544 .

Ich weiß nicht, ob LDP.exe noch so funktioniert, aber es kann sein.

Matt Simmons
quelle
Dieser Artikel gilt nur für Domänencontroller.
MDMarra
Vielen Dank für die Informationen, ich suche nach einer GUID, die auf allen Windows-Versionen, XP und höher existieren würde
user28967
0

Wenn Sie eine Windows-Installation identifizieren möchten, haben Sie möglicherweise kein Glück. In Unternehmensumgebungen werden Workstations häufig eher abgebildet als installiert. Jeder aus diesem Image erstellte Computer ist identisch.

Das, was Sie beschrieben haben, ist die SID des Geräts am nächsten. Dies funktioniert jedoch aus zwei Gründen nicht:

  1. Abgebildete Windows XP-Computer haben dieselbe SID, es sei denn, Sie führen NewSID für sie aus, was viele Benutzer nicht tun.
  2. Alle Domänencontroller in einer einzelnen Domäne verwenden dieselbe Computer-SID.

Wofür benötigen Sie diese Kennung? Am besten generieren Sie Ihre eigenen, wenn dies möglich ist.

Stephen Jennings
quelle
1
Wenn die Maschinen nach dem Imaging Syspreps sind, ist die SID unterschiedlich. Wenn dies nicht der Fall ist (was allzu oft nicht der Fall ist), sind die SIDs gleich.
Mrdenny
0

Sie können die MAC-Adresse ausprobieren, die zumindest global eindeutig und dauerhaft sein soll. Dies hätte auch den schönen Vorteil, dass Sie die IP-Adresse und den Hostnamen eines Computers ohne allzu große Mühe erhalten könnten (und dies wäre auch nicht auf Windows beschränkt). Es würde Ihre Anforderung, in der Registrierung zu sein, nicht erfüllen, aber Sie können stattdessen WMI dafür verwenden.

Beispielskripte hier: http://www.winforums.com/showthread.php?t=8842

Maximus Minimus
quelle
0

Wie wäre es mit der DriveId des Systemvolumes? Sie können die ID aus der Win32_VolumeWMI-Klasse abrufen, indem Sie mit SystemVolume True nach Einträgen suchen.

In PowerShell:

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

(Dies kann natürlich entfernt werden.)

Richard
quelle
0

Es gibt eine von Windows Update verwendete SID, die Sie möglicherweise verwenden können. Auch hier gibt es keine Garantie dafür, dass es jedes Mal einzigartig ist oder sich nicht ändert.

Ich denke, dass die MAC-Adresse am ehesten Ihren Anforderungen entspricht, die sich jedoch ändern könnte, wenn die Netzwerkkarte ersetzt würde.

Am besten schreiben Sie Ihre eigene GUID in die Registrierung und verwenden diese.

mrdenny
quelle
0

Um die Computer-SID auf einem bestimmten Computer zu bestätigen, können Sie SysInternals PSGETSID% COMPUTERNAME% $ ausführen. (Domain SID).

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

BEARBEITEN: Verweise auf die Computer-SID in der Registrierung wurden entfernt, die möglicherweise nicht eindeutig (oder sogar korrekt) sind.

Greg Askew
quelle
Ach komm schon, wenn du jemanden modifizieren willst, hinterlasse wenigstens einen Kommentar und lass ihn wissen, was los ist.
Matt Simmons
Es wird nicht garantiert, dass Maschinen-SIDs eindeutig sind: blogs.technet.com/markrussinovich/archive/2009/11/03/…
Bis auf weiteres angehalten.
@ Tennis - richtig. Wenn es sich also in einer Domäne befindet: psgetsid.exe% Computername% $ würde eine eindeutige Kennung erzeugen.
Greg Askew
@ Greg: Was ist, wenn Sie Ihre Workstations aus Bildern erstellen? Wenn Sie newsid nicht ausgeführt haben, teilen sich alle dieselbe Computer-SID.
Stephen Jennings
@Stephen - Die Verwendung der Domain-SID würde dieses Problem beheben. blogs.msdn.com/aaron_margosis/archive/2009/11/05/…
Greg Askew
-1

Warum nicht einfach den Computernamen verwenden? Es wird innerhalb Ihrer Domäne eindeutig sein, alle Windows-Installationen haben eine und werden sich nur ändern, wenn ein Domänenadministrator sie ändert, was ohne eine Korrektur niemals erforderlich sein sollte.

Shial
quelle
-2

Auch ich muss einen Weg finden, um Windows-Installationen global eindeutig zu identifizieren. Erstens, um Backup-Images richtig zu klassifizieren und zu identifizieren und festzustellen, welche auf welchen Computern wiederhergestellt werden. Zweitens, um Synchronisationspaare zum Synchronisieren von Dateien zu benennen und zu bestimmen, welches Synchronisationspaar in Abhängigkeit von den an der Synchronisation beteiligten Maschinen verwendet werden soll.

Nachdem ich mehrere Beiträge gelesen habe, einschließlich der auf dieser Website, komme ich zu dem Schluss, dass es keine einfache Möglichkeit gibt, eine global eindeutige Kennung einer Windows-Installation zu finden. Das ist zu schade. Wie die Hardware sollte auch die Software eine eigene Seriennummer haben. Naja! Dies ist meine Problemumgehung: Anstatt eine einzige global eindeutige Kennung zu finden, habe ich eine sylisierte Anweisung erstellt, die sich an der Art und Weise orientiert, wie Microsoft Netzwerklaufwerke unter Windows benennt und wie freigegebene Ordner in Virtual PC benannt werden: "[WINDOWS PRODUKT-ID ( als Variable )] Installiert auf [COMPUTER SERIAL NUMBER ( als Variable))]. "Obwohl eine Windows-Produktionsidentifikationsnummer nur insoweit eindeutig ist, als der entsprechende Produktschlüssel vorhanden ist, kann sie dennoch für mehrere Installationen gleich sein, insbesondere auf Seriencomputern mit werkseitig installiertem Windows, jedoch einer Seriennummer Die Nummer ist eindeutig und unterscheidet sich von einem Computer zum anderen. Die oben genannte Formel ist alles, was ich für meine Zwecke benötige. Ich benötige die SID nicht (ich gehe davon aus, dass sie die Sicherheitskennung bedeutet) oder etwas anderes Komplexeres, weil die Kombination beider Variablen genau auf die Windows-Installation verweist, die ich identifizieren muss, während jede einzelne Variable für sich genommen für mich keinen Nutzen hat. Insbesondere und erstens ist die Windows-Produktidentifikation auf Computern desselben Herstellers identisch, die in derselben Produktlinie enthalten sind, und das hat keinen Zweck, da ich mehrere identische Computer besitze. Zweitens ist die Seriennummer nicht eindeutig genug, da ich mehrere Windows-Installationen auf einem Computer habe, die von einer Computerseriennummer nicht adressiert werden. Ich schlage daher meine Methode vor.

Außerdem und bevor Sie sich danach erkundigen: Ich habe mich entschieden, meine Methode nicht auf den Computernamen zu stützen. Die Informationen sind benutzerbasiert und müssen daher inventarisiert werden. Die Windows-Produktidentifikation und die Seriennummer des Computers sind jedoch bereits identifiziert, inventarisiert und ausnahmslos mit zwei bestimmten Produkten verbunden, sodass sie nicht erneut inventarisiert werden müssen. Ich würde mich auch nicht dafür entscheiden, eine Windows-Installation mit einer eindeutigen Kennung von Festplatten zu identifizieren, da ich in der Lage und durchaus geeignet bin, sie von einem Computer auf einen anderen umzuschalten, insbesondere wenn die Laufwerkskapazitäten in einem Zustand ständigen Flusses sind. Aus dem gleichen Grund würde ich die identifizierende Nomenklatur entweder der Zentraleinheit oder des Motherboards viel weniger verwenden, wie dies bereits in einer früheren Antwort von Shoeless vorgeschlagen wurde. Schließlich lehne ich auch die naheliegendste Möglichkeit ab, eine Windows-Installation zu identifizieren (obwohl sie von niemand anderem erwähnt wurde): Verwenden des Produktschlüssels. Obwohl es einzigartig ist, ist es nur eine Lizenz zum Installieren einer bestimmten Windows-Version. Es ist nicht mit einer bestimmten Windows-Installation verbunden und unterscheidet sich nicht von der Installation auf einem bestimmten Computer, obwohl die Lizenz aufgrund des Kaufs eines bestimmten Computers erteilt wurde.

Neal Bangia
quelle
3
Und Ihre Antwort auf die Frage lautet ...?
Deer Hunter