Шукаєте унікальний GUID для ідентифікації установки Windows


15

Я шукаю унікальний GUID, що зберігається в реєстрі Windows, який допоможе мені визначити інсталяцію Windows або ПК.

GUID повинен;

  • Завжди існують
  • Будьте унікальними для певної інсталяції Windows, тобто жоден інший комп'ютер не мав би той самий ідентифікатор
  • Ніколи не зміниться

Дуже дякую


Чому дописи на SF та SU? superuser.com/questions/82484/…
MDMarra

Відповіді:


8

Ви можете отримати GUID з реєстру Windows, наприклад:

var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\MachineGuid";
var oWSS = new ActiveXObject("WScript.Shell");
clientGUID = oWSS.RegRead(regpath);

ваш код на C # чи якійсь іншій мові програмування?
Тім

Це JavaScript, який я використовував у гаджеті Windows 7.
смажена ніч

1
Чи мають C # і Javascript дуже схожі синтаксиси?
Тім

Вибачте, не можу сказати, я не знайомий із C #. Це лише 3 рядки простого коду, вони містять змінне визначення, літеральний рядок, створення нового об'єкта та використання точкової позначення для доступу до методу об'єкта. Ймовірно, існує багато інших структур коду для порівняння мов.
смажена

@Tim, я думаю, вам цікаво читати ключі реєстру в C #? Якщо так, то, можливо, це питання для вас буде корисним
friednail

7

Чи очікуєте ви, що це число зміниться або залишиться незмінним, якщо диск для цієї установки буде переміщений до іншої системи?

Чи очікуєте ви, що цей номер буде змінено, якщо установка клонується привидом чи чимось іншим? Чи можете ви залежати від клонованих систем, які завжди систематизовано виконують рекомендації Microsoft? SID повинен бути добре, якщо ви можете бути впевнені, що ваші встановлення ніколи не клонуються.

У випадку з багатозавантажувальною системою (тобто у системі встановлено Windows 7 та Windows XP) вам потрібно визначити дві установки як унікальні, або пов’язані з ними, чи які?

Навіщо вам це потрібно, щоб це було частиною установки Windows, а не те, що представлене обладнанням, можливо, серійний номер процесора ?

Я припускаю, що ви запитуєте про це для якогось сценарію чи інструменту, який ви використовуєте для цілей інвентаризації?

Чому ви не просто генеруєте власний номер під час першого запуску інструменту та зберігаєте його у вулику реєстру LOCAL_MACHINE? Можливо, навіть використовувати номер RFC4122 типу 1, який повинен містити апаратну адресу одного з мережевих інтерфейсів. Таким чином ви можете перевірити, чи UUID все ще належить до цієї системи, порівнявши UUID з наявними мережевими адаптерами.


2

Ви хочете використовувати ідентифікатор продукту Windows. Це унікальний номер, згенерований (хешований) частково від встановленого ключа продукту та частково з конфігурації обладнання, включаючи серійний номер процесора та MAC-адресу з першого NIC. Про це ви можете прочитати в цій (дещо застарілій, але все-таки дійсній) статті TechNet . Ідентифікатор продукту можна знайти на екрані Інформація про систему або програмно за допомогою декількох методів.

Інформація про систему


Реєстр, що містить ліцензію на вікно користувачів, знаходиться за адресою: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion, для читання не потрібні спеціальні хитрощі
Walter Vehoeven

0

Якщо припустити, що це сервер Windows, є стаття бази знань, яка розповідає про те, як вийти з Win2k: KB224544 .

Я не знаю, чи LDP.exe все ще працює так, але може.


Ця стаття стосується лише контролерів домену.
MDMarra

Дякую за інформацію, я шукаю GUID, який існував би для всіх версій Windows, XP та новіших версій
user28967

0

Я не такий впевнений, що значення GUID, як те, яке ви описуєте, існує. Поширена практика - використовувати інформацію про ідентифікатор CPU або материнської плати.

Ось посилання на допис на форумі, який містить відповідний код сценарію WMI: http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic59274.aspx


0

Якщо ви хочете визначити інсталяцію Windows, то, можливо, вам не пощастить. У корпоративному середовищі робочі станції часто зображують замість встановлених. Кожен комп'ютер, побудований з цього зображення, буде ідентичним.

Найближче до того, що ви описали, - це SID машини, але це не працює з двох причин:

  1. Машини Windows XP мають один і той же SID, якщо ви не запустите NewSID проти них, чого багато людей не роблять.
  2. Всі контролери домену на одному домені мають однаковий SID машини.

Для чого вам потрібен цей ідентифікатор? Вашою найкращою ставкою може бути створення власного, якщо це можливо.


1
Якщо машини візуалізуються після візуалізації, то SID буде іншим. Якщо їх немає (що часто не є), SID будуть однаковими.
mrdenny

0

Ви можете спробувати MAC-адресу, яка, принаймні, покликана бути унікальною та постійною у всьому світі. Це також матиме хорошу перевагу, що ви можете отримати IP-адресу машини та ім'я хоста без особливих зусиль (і це також не обмежуватиметься Windows). Це не відповідає вашій вимозі бути в реєстрі, але ви можете використовувати WMI для цього.

Зразки сценаріїв тут: http://www.winforums.com/showthread.php?t=8842


0

Як щодо DriveId обсягу системи? Ви можете отримати ідентифікатор з Win32_Volumeкласу WMI, шукаючи записи в SystemVolume True.

В PowerShell:

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

(Це, звичайно, можна видалити.)


0

У службі оновлення Windows використовується SID, який ви можете використовувати. Знову ж таки, немає гарантії, що вона буде унікальною щоразу або що вона не зміниться.

Я думаю, що найближчим чином для задоволення ваших потреб буде MAC-адреса, однак це може змінитися, якщо NIC буде замінено.

Найкраще ставитись за те, щоб написати власний GUID в реєстр і використовувати його.


0

Щоб підтвердити SID машини на певній машині, ви можете запустити SysInternals PSGETSID% COMPUTERNAME% $. (SID домену).

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

EDIT: Видалено посилання на машину SID в реєстрі, яка може бути не унікальною (або навіть правильною).


Ой давай, якщо ти збираєшся відмовити когось, хоча б залиште коментар і дайте їм знати, що не так.
Метт Сіммонс


@Dennis - правильно. Отже, якщо він знаходиться в домені: psgetsid.exe% ім'я комп'ютера% $ створить унікальний ідентифікатор.
Грег Аскеу

@Greg: Що робити, якщо ви будуєте свої робочі станції із зображень? Якщо ви не запустили newsid, всі вони матимуть однаковий SID машини.
Стівен Дженнінгс

@Stephen - Використання SID домену вирішить цю проблему. blogs.msdn.com/aaron_margosis/archive/2009/11/05/…
Грег

-1

Чому б не просто використовувати ім’я комп’ютера? Це буде унікальним у вашому домені, всі установки Windows мають один і змінюватимуться лише в тому випадку, якщо адміністратор домену змінить його, що ніколи не знадобиться, якщо не внести виправлення.


-2

Мені теж потрібно знайти спосіб глобально однозначно визначити установки Windows. По-перше, щоб правильно класифікувати та ідентифікувати резервні зображення та визначити, які з них відновити на яких машинах. По-друге, для того, щоб назвати пари синхронізації для синхронізації файлів та визначити, яку пару синхронізації використовувати в залежності від машин, що беруть участь у синхронізації.

Прочитавши кілька дописів, у тому числі на цьому веб-сайті, я роблю висновок, що не існує простого способу знайти глобально унікальний ідентифікатор інсталяції Windows. Це дуже погано. Як і апаратне забезпечення, програмне забезпечення також повинно мати власний серійний номер. Що ж, добре! Отож, це мій спосіб вирішення: замість того, щоб знайти один єдиний глобально унікальний ідентифікатор, я створив узагальнений вислів, який надихається на те, як мережа імен Microsoft працює в Windows і як вона називає спільні папки у віртуальному ПК: "[WINDOWS Ідентифікатор продукту ( як змінна )] Встановлено на [КОМП'ЮТЕРНИЙ СЕРІЙНИЙ НОМЕР ( як змінну))]. "Хоча ідентифікаційний номер виробництва Windows унікальний лише в тому випадку, якщо відповідний ключ продукту є, тим не менш, він може бути однаковим у кількох установках, особливо на серійних комп'ютерах, що містять встановлені на заводі Windows, але серійний номер унікальний і відрізняється від однієї машини до іншої. Вищезгадана формула - це все, що мені потрібно для моїх цілей; SID мені не потрібен (я припускаю, що він означає ідентифікатор безпеки) або щось інше більш складне, оскільки поєднання обох змінних посилається саме на установку Windows, яку мені потрібно ідентифікувати, тоді як кожна окрема змінна сама по собі мені не приносить користі. Зокрема, по-перше, ідентифікація продукту Windows однакова на комп’ютерах, виготовлених тим самим виробником і в одній лінійці продуктів, і це не відповідає мені, оскільки я володію декількома однаковими машинами. По-друге, серійний номер недостатньо однозначно ідентифікує, оскільки у мене на одному комп’ютері є декілька інсталяцій Windows, на яких серійний номер комп'ютера не адресується. Тому я пропоную свій метод.

Крім того, і перш ніж ви дізнаєтесь про це: я вирішив не базувати свій метод на імені комп'ютера. Інформація заснована на користувачеві, і тому її потрібно інвентаризувати. Однак ідентифікація продукту Windows та серійний номер комп'ютера вже ідентифіковані, інвентаризовані та незмінно пов'язані з двома конкретними продуктами, тим самим усуваючи необхідність повторного інвентаризації. Я б не вирішив ідентифікувати установку Windows з унікальним ідентифікатором жорстких дисків, оскільки я вмію і цілком схильний перемикати їх з однієї машини на іншу, особливо, коли ємності накопичувача знаходяться в стані постійного потоку. Таким же чином я б набагато менше використовував ідентифікаційну номенклатуру центрального блоку обробки або материнської плати, як це було раніше запропоновано у попередній відповіді Shoeless. Нарешті, я також відкидаю найбільш очевидний варіант ідентифікації установки Windows (хоча ніхто з інших не згадував з того, що я бачу): використовуючи ключ продукту. Хоча це унікально, це лише ліцензія на встановлення певної версії Windows; він фактично не підключений до певної інсталяції Windows, і це не відрізняє його від встановлення на певній машині, навіть незважаючи на те, що ліцензія була надана внаслідок придбання даного комп'ютера.


3
А ваша відповідь на питання - це ...?
Мисливець на оленів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.