Ищете уникальный GUID для идентификации установки Windows

11

Я ищу уникальный идентификатор GUID, хранящийся в реестре Windows, который поможет мне определить установку Windows или ПК.

GUID должен;

  • Всегда существовать
  • Быть уникальным для конкретной установки Windows, т. Е. Ни один другой компьютер не будет иметь такой же идентификатор
  • Никогда не меняется

Большое спасибо

user28967
источник
Зачем постить на SF и SU? superuser.com/questions/82484/…
MDMarra

Ответы:

6

Ожидаете ли вы, что это число изменится или останется прежним, если диск для этой установки будет перенесен в другую систему?

Ожидаете ли вы, что это число будет изменено, если установка будет клонирована с призраком или чем-то еще? Можете ли вы полагаться на то, что клонированные системы всегда будут выполнять sysprep после рекомендаций Microsoft? SID должен быть в порядке, если вы можете быть уверены, что ваши установки никогда не клонируются.

В случае мультизагрузочной системы (то есть в системе установлена ​​ОС Windows 7 и Windows XP), вам нужно определить две установки как уникальные или связанные или как?

Почему вам нужно, чтобы это было частью установки Windows, а не чем-то, представленным аппаратным обеспечением, возможно , серийным номером процессора ?

Я предполагаю, что вы спрашиваете об этом для какого-то сценария или инструмента, который вы используете для инвентаризации?

Почему бы вам не сгенерировать свой собственный номер при первом запуске инструмента и сохранить его в кусте реестра LOCAL_MACHINE? Возможно, даже использовать номер типа 1 RFC4122, который должен включать аппаратный адрес для одного из сетевых интерфейсов. Таким образом, вы можете проверить, принадлежит ли UUID к этой системе, сравнив UUID с существующими сетевыми адаптерами.

Zoredache
источник
5

Вы можете получить GUID из реестра Windows, например:

var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\MachineGuid";
var oWSS = new ActiveXObject("WScript.Shell");
clientGUID = oWSS.RegRead(regpath);
friednail
источник
ваш код на C # или какой-то другой язык программирования?
Тим
Это JavaScript, который я использовал в Windows 7 гаджет.
жареный
1
Есть ли в C # и Javascript очень похожие синтаксисы?
Тим
Извините, не могу сказать вам, я не знаком с C #. Это всего лишь 3 строки простого кода, они содержат определение переменной, строковый литерал, создание нового объекта и использование точечной нотации для доступа к методу объекта. Вероятно, есть множество других структур кода для сравнения языков.
жаркое
@ Тим, думаю, тебе интересно читать ключи реестра в C #? Если это так, возможно, этот ТАК вопрос будет полезен для вас
Friednail
2

Вы хотите использовать идентификатор продукта Windows. Это уникальный номер, сгенерированный (хэшированный) частично из установленного ключа продукта и частично из конфигурации оборудования, включая серийный номер процессора и MAC-адрес из первой сетевой карты. Вы можете прочитать об этом в этой (несколько устаревшей, но все еще действующей) статье TechNet . Идентификатор продукта можно найти на экране «Информация о системе» или программно несколькими способами.

Системная информация

tfrederick74656
источник
Реестр, в котором хранится лицензия окна пользователя, находится по адресу: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion, для его чтения не требуется специальных трюков
PPann
0

Предполагая, что это сервер Windows, есть статья базы знаний, в которой рассказывается, как получить его из Win2k: KB224544 .

Я не знаю, работает ли LDP.exe по-прежнему, но это возможно.

Мэтт Симмонс
источник
Эта статья относится только к контроллерам домена.
MDMarra
Спасибо за информацию, я ищу GUID, который будет существовать во всех версиях Windows, XP и выше
user28967 12.12.09
0

Я не уверен, что значение GUID, подобное тому, которое вы описываете, действительно существует. Обычной практикой является использование информации идентификатора процессора или материнской платы.

Вот ссылка на сообщение на форуме, содержащее соответствующий код сценария WMI: http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic59274.aspx

босой
источник
0

Если вы хотите определить установку Windows, то вам может не повезти. В корпоративных средах рабочие станции часто отображаются, а не установлены. Каждый компьютер, созданный из этого изображения, будет идентичен.

Самое близкое к тому, что вы описали, это SID компьютера, однако это не работает по двум причинам:

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

Зачем вам нужен этот идентификатор? Ваша лучшая ставка может состоять в том, чтобы создать свой собственный, если это возможно.

Стивен Дженнингс
источник
1
Если после создания образа машины являются syspreps, то SID будет другим. Если это не так (как это часто бывает), идентификаторы безопасности будут одинаковыми.
Мрденный
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 используется идентификатор безопасности, который вы можете использовать. Опять же, нет никакой гарантии, что он будет уникальным каждый раз или что он не изменится.

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

Лучше всего будет записать свой собственный GUID в реестр и использовать его.

mrdenny
источник
0

Чтобы подтвердить SID компьютера на определенном компьютере, вы можете запустить SysInternals PSGETSID% COMPUTERNAME% $. (Доменный SID).

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

РЕДАКТИРОВАТЬ: Удалены ссылки на SID компьютера в реестре, который может быть не уникальным (или даже правильным).

Грег Аскью
источник
О, давай, если ты собираешься модифицировать кого-то, хотя бы оставь комментарий и дай ему понять, что не так.
Мэтт Симмонс
Идентификаторы SID машин не гарантируются уникальными: blogs.technet.com/markrussinovich/archive/2009/11/03/…
Деннис Уильямсон
@ Денис - верно. Поэтому, если он находится в домене: psgetsid.exe% computername% $ выдаст уникальный идентификатор.
Грег Аскью
@Greg: Что делать, если вы строите свои рабочие станции из изображений? Если вы не запустили newsid, они будут использовать один и тот же SID компьютера.
Стивен Дженнингс
@Stephen - Использование SID домена поможет решить эту проблему. blogs.msdn.com/aaron_margosis/archive/2009/11/05/…
Грег Аскью,
-1

Почему бы просто не использовать имя компьютера? Он будет уникальным в вашем домене, все установки Windows имеют его и будут меняться только в том случае, если администратор домена изменит его, что никогда не понадобится, если не будет внесено исправление.

Shial
источник
-2

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

Прочитав несколько сообщений, в том числе на этом веб-сайте, я пришел к выводу, что не существует простого способа найти глобально уникальный идентификатор установки Windows. Это очень плохо. Как и оборудование, программное обеспечение также должно иметь собственный серийный номер. Ну что ж! Так что это мой обходной путь: вместо того, чтобы находить один глобально уникальный идентификатор, я создал сводное утверждение, вдохновленное тем, как Microsoft называет сетевые диски в Windows и как называет общие папки в Virtual PC: «[WINDOWS Идентификатор продукта ( как переменная )] Установлен в [Серийный номер компьютера ( как переменная))]. "Хотя производственный идентификационный номер Windows является уникальным только в том случае, если соответствующий ключ продукта, тем не менее, он может быть одинаковым в нескольких установках, особенно на компьютерах массового производства, содержащих установленную на заводе Windows, но серийную версию. число уникально и отличается от одной машины к другой. Вышеупомянутая формула - все, что мне нужно для моих целей; мне не нужен SID (я предполагаю, что это означает Идентификатор безопасности) или что-то еще более сложное, потому что комбинация обеих переменных относится именно к установке Windows, которую мне нужно идентифицировать, тогда как каждая отдельная переменная сама по себе мне не нужна. В частности, во-первых, идентификация продукта Windows идентична на компьютерах, изготовленных одним и тем же производителем и обнаруженных в одной и той же линейке продуктов, и это не имеет смысла, поскольку у меня несколько идентичных компьютеров. Во-вторых, серийный номер недостаточно однозначно идентифицирует, так как у меня есть несколько установок Windows на одном компьютере, к которым серийный номер компьютера не относится. Поэтому я предлагаю свой метод.

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

Нил Бангиа
источник
3
И ваш ответ на вопрос ...?
Охотник на оленей