Windows 설치를 식별하기위한 고유 한 GUID 찾기


15

Windows 설치 또는 PC를 식별하는 데 도움이되는 고유 한 GUID를 Windows 레지스트리에 저장하려고합니다.

GUID는 필수입니다.

  • 항상 존재
  • 특정 Windows 설치에 고유해야합니다. 즉, 다른 컴퓨터는 동일한 ID를 가지지 않습니다
  • 절대 안 바뀌어

많은 감사


SF와 SU에 게시해야하는 이유 superuser.com/questions/82484/…
MDMarra

답변:


8

Windows 레지스트리에서 GUID를 얻을 수 있습니다. 예를 들면 다음과 같습니다.

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

코드가 C # 또는 다른 프로그래밍 언어입니까?
Tim

Windows 7 가젯에서 사용한 JavaScript입니다.
friednail

1
C #과 Javascript는 매우 유사한 구문을 가지고 있습니까?
Tim

죄송합니다. C #에 익숙하지 않습니다. 이것들은 간단한 코드의 3 줄에 불과하며 변수 정의, 문자열 리터럴, 새로운 객체 생성 및 도트 표기법을 사용하여 객체의 메소드에 액세스합니다. 아마도 언어를 비교할 수있는 다른 코드 구조가 많이있을 것입니다.
friednail

@ Tim, C #에서 레지스트리 키를 읽는 데 관심이 있다고 생각하십니까? 그렇다면이 SO 질문 이 도움이 될 것입니다.
friednail

7

해당 설치용 드라이브를 다른 시스템으로 옮길 경우이 번호가 변경되거나 동일하게 유지됩니까?

설치가 고스트 또는 다른 것으로 복제 된 경우이 번호가 변경 될 것으로 예상됩니까? Microsoft의 권장 사항에 따라 항상 sysprep'd 인 복제 된 시스템에 의존 할 수 있습니까? 설치가 복제되지 않았 음을 확신 할 수 있으면 SID가 양호해야합니다.

다중 부팅 시스템 (예 : 시스템에 Windows 7 및 Windows XP 설치)이있는 경우 두 설치를 고유 또는 관련 또는 무엇으로 식별해야합니까?

왜 이것이 하드웨어에 의해 제공되는 것이 아닌 프로세서 일련 번호가 아닌 Windows 설치의 일부가되어야 합니까?

인벤토리 목적으로 사용하는 스크립트 또는 도구에 대해 이것에 대해 질문하고 있다고 가정합니까?

도구를 처음 실행할 때 고유 번호를 생성하여 LOCAL_MACHINE 레지스트리 하이브에 저장하지 않는 이유는 무엇입니까? 아마도 RFC4122 유형 1 번호를 사용하고 네트워크 인터페이스 중 하나의 하드웨어 주소를 포함해야합니다. 이렇게하면 현재 네트워크 어댑터와 UUID를 비교하여 UUID가 해당 시스템에 속하는지 확인할 수 있습니다.


2

Windows 제품 ID를 사용하려고합니다. 이는 설치된 제품 키에서 부분적으로 생성 (해시) 된 고유 번호이며, 첫 번째 NIC의 프로세서 일련 번호 및 MAC 주소를 포함하여 부분적으로 하드웨어 구성에서 발생합니다. 이 (일부 날짜는 있지만 여전히 유효한) TechNet 기사에서 그것에 대해 읽을 수 있습니다 . 제품 ID는 시스템 정보 화면에서 또는 여러 방법을 통해 프로그래밍 방식으로 찾을 수 있습니다.

시스템 정보


\ SOFTWARE \ 마이크로 소프트 \ 윈도우 NT \ CurrentVersion을, 그것을 읽는 데 필요한 특별한 트릭 HKEY_LOCAL_MACHINE : 사용자의 윈도우 라이센스를 보유하고 레지스트리가에 위치
월터 Vehoeven

0

Windows 서버라고 가정하면 Win2k에서 서버를 꺼내는 방법에 대한 기술 자료 문서 : KB224544가 있습니다.

LDP.exe가 여전히 그런 식으로 작동하는지 모르겠지만 작동 할 수 있습니다.


이 문서는 도메인 컨트롤러에만 적용됩니다.
MDMarra

, XP 이상 모든 Windows 버전에 존재하는 것 GUID를 찾고 메신저, 정보 주셔서 감사합니다
user28967


0

Windows 설치를 식별하려는 경우 운이 좋지 않을 수 있습니다. 회사 환경에서 워크 스테이션은 종종 설치된 이미지가 아닙니다. 이 이미지로 구축 된 각 컴퓨터는 동일합니다.

설명에 가장 가까운 것은 시스템의 SID이지만 두 가지 이유로 작동하지 않습니다.

  1. 이미지가있는 Windows XP 시스템은 NewSID를 실행하지 않는 한 동일한 SID를 갖습니다.
  2. 단일 도메인의 모든 도메인 컨트롤러는 동일한 컴퓨터 SID를 공유합니다.

이 식별자가 무엇입니까? 가장 좋은 방법은 가능하다면 직접 생성하는 것입니다.


1
이미징 후 머신이 syspreps이면 SID가 달라집니다. 이들이 아닌 경우 (종종 그렇지 않은 경우) SID는 동일합니다.
mrdenny

0

최소한 전 세계적으로 독특하고 영구적 인 MAC 주소를 사용해 볼 수 있습니다. 이것은 너무 귀찮게하지 않고 컴퓨터의 IP와 호스트 이름을 얻을 수 있다는 좋은 이점이 있습니다 (Windows로 제한되지 않아야 함). 레지스트리에 있어야한다는 요구 사항을 충족하지는 않지만 대신 WMI를 사용할 수 있습니다.

샘플 스크립트는 다음과 같습니다. http://www.winforums.com/showthread.php?t=8842


0

시스템 볼륨의 DriveId는 어떻습니까? Win32_VolumeSystemVolume True가있는 항목을 찾아 WMI 클래스 에서 ID를 얻을 수 있습니다 .

PowerShell에서 :

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

(물론 원격 일 수 있습니다.)


0

Windows Update에서 사용할 수있는 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

편집 : 레지스트리에서 컴퓨터 SID에 대한 참조를 제거했습니다. 고유하지 않거나 정확하지 않을 수도 있습니다.


어서, 누군가를 쓰러 뜨리려면 최소한 코멘트를 남기고 무엇이 잘못되었는지 알려주십시오.
매트 시몬스


@ 데니스-맞습니다. 따라서 도메인에있는 경우 : psgetsid.exe % computername % $는 고유 식별자를 생성합니다.
Greg Askew

@Greg : 이미지로 워크 스테이션을 구축하면 어떻게 되나요? newsid를 실행하지 않은 경우 모두 동일한 시스템 SID를 공유합니다.
Stephen Jennings

@Stephen-도메인 SID를 사용하면이 문제가 해결됩니다. blogs.msdn.com/aaron_margosis/archive/2009/11/05/…
Greg Askew

-1

왜 컴퓨터 이름을 사용하지 않습니까? 도메인 내에서 고유하며 모든 Windows 설치에는 하나가 있으며 도메인 관리자가 변경하면 수정하지 않으면 절대 필요하지 않은 경우에만 변경됩니다.


-2

전 세계적으로 Windows 설치를 고유하게 식별하는 방법을 찾아야합니다. 먼저 백업 이미지를 올바르게 분류하고 식별하고 어떤 머신에서 어떤 이미지를 복구할지 결정합니다. 둘째, 파일 동기화를위한 동기화 쌍의 이름을 지정하고 동기화에 관련된 머신에 따라 사용할 동기화 쌍을 결정합니다.

이 웹 사이트의 게시물을 포함하여 여러 게시물을 읽은 후에는 전 세계적으로 고유 한 Windows 설치 식별자를 찾을 수있는 쉬운 방법이 없다고 결론을 내 렸습니다. 너무 나쁘다. 하드웨어와 마찬가지로 소프트웨어에도 고유 한 일련 번호가 있어야합니다. 오 잘! 이에 대한 해결 방법은 다음과 같습니다. 하나의 글로벌 고유 식별자를 찾는 대신 Microsoft가 Windows에서 네트워크 드라이브 이름을 지정하는 방식과 가상 PC에서 공유 폴더 이름을 지정하는 방식에서 영감을 얻은 양식화 된 문장을 작성했습니다. "[WINDOWS PRODUCT ID ( 변수로 )] [컴퓨터 일련 번호에 설치 ( 변수로))]. "Windows 제품 식별 번호는 해당 제품 키가있는 경우에만 고유하지만 여러 설치, 특히 공장에서 설치된 Windows가 포함 된 대량 생산 컴퓨터에서 일련 번호가 동일하지만 일련 번호는 동일합니다. 번호는 고유하고 기계마다 다릅니다. 위에서 언급 한 공식은 제가 목적으로 필요한 전부입니다 .SID가 필요하지 않습니다 ( 보안 식별자를 나타내는 것으로 가정합니다)) 또는 더 복잡한 것입니다. 두 변수의 조합은 정확히 식별 해야하는 Windows 설치를 참조하지만 각 개별 변수는 나에게 소용이 없기 때문입니다. 구체적으로 그리고 첫째, Windows 제품 식별은 동일한 제조업체에서 제조 한 컴퓨터에서 동일하고 동일한 제품 라인에 있으며 동일한 여러 시스템을 소유하고 있기 때문에 아무런 목적이 없습니다. 둘째, 일련 번호는 컴퓨터 일련 번호로 해결할 수없는 여러 컴퓨터를 한 컴퓨터에 설치하기 때문에 고유하게 식별 할 수 없습니다. 그러므로 나는 나의 방법을 제안한다.

또한, 당신이 그것에 대해 문의하기 전에 : 나는 컴퓨터 이름을 기반으로 내 방법을 사용하지 않기로 결정했습니다. 정보는 사용자 기반이므로 인벤토리를 작성해야합니다. 그러나 Windows 제품 식별 및 컴퓨터 일련 번호는 이미 식별되어 인벤토리에 있으며 두 특정 제품에 항상 연결되어 있으므로 재고를 다시 확보 할 필요가 없습니다. 특히 드라이브 용량이 일정한 플럭스 상태에있을 때 한 시스템에서 다른 시스템으로 전환 할 수 있기 때문에 고유 한 하드 드라이브 식별자로 Windows 설치를 식별하지 않을 것입니다. 마찬가지로, Shoeless 의 이전 답변에서 제안했듯이 중앙 처리 장치 또는 마더 보드의 식별 명명법을 훨씬 덜 사용합니다.. 마지막으로, 나는 Windows 설치를 식별하는 가장 확실한 옵션을 거부합니다 (제품 키를 사용하여 다른 사람이 언급하지는 않았지만). 고유하지만 특정 버전의 Windows를 설치하는 것은 라이센스 일뿐입니다. 실제로 특정 Windows 설치에 연결되어 있지 않으며 특정 컴퓨터를 구입하여 라이센스가 부여 되었음에도 불구하고 특정 컴퓨터에 설치되어있는 것과 구별되지 않습니다.


3
질문에 대한 당신의 대답은 ...?
Deer Hunter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.