답변:
Windows 레지스트리에서 GUID를 얻을 수 있습니다. 예를 들면 다음과 같습니다.
var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\MachineGuid";
var oWSS = new ActiveXObject("WScript.Shell");
clientGUID = oWSS.RegRead(regpath);
해당 설치용 드라이브를 다른 시스템으로 옮길 경우이 번호가 변경되거나 동일하게 유지됩니까?
설치가 고스트 또는 다른 것으로 복제 된 경우이 번호가 변경 될 것으로 예상됩니까? Microsoft의 권장 사항에 따라 항상 sysprep'd 인 복제 된 시스템에 의존 할 수 있습니까? 설치가 복제되지 않았 음을 확신 할 수 있으면 SID가 양호해야합니다.
다중 부팅 시스템 (예 : 시스템에 Windows 7 및 Windows XP 설치)이있는 경우 두 설치를 고유 또는 관련 또는 무엇으로 식별해야합니까?
왜 이것이 하드웨어에 의해 제공되는 것이 아닌 프로세서 일련 번호가 아닌 Windows 설치의 일부가되어야 합니까?
인벤토리 목적으로 사용하는 스크립트 또는 도구에 대해 이것에 대해 질문하고 있다고 가정합니까?
도구를 처음 실행할 때 고유 번호를 생성하여 LOCAL_MACHINE 레지스트리 하이브에 저장하지 않는 이유는 무엇입니까? 아마도 RFC4122 유형 1 번호를 사용하고 네트워크 인터페이스 중 하나의 하드웨어 주소를 포함해야합니다. 이렇게하면 현재 네트워크 어댑터와 UUID를 비교하여 UUID가 해당 시스템에 속하는지 확인할 수 있습니다.
Windows 제품 ID를 사용하려고합니다. 이는 설치된 제품 키에서 부분적으로 생성 (해시) 된 고유 번호이며, 첫 번째 NIC의 프로세서 일련 번호 및 MAC 주소를 포함하여 부분적으로 하드웨어 구성에서 발생합니다. 이 (일부 날짜는 있지만 여전히 유효한) TechNet 기사에서 그것에 대해 읽을 수 있습니다 . 제품 ID는 시스템 정보 화면에서 또는 여러 방법을 통해 프로그래밍 방식으로 찾을 수 있습니다.
설명하는 것과 같은 GUID 값이 실제로 존재하는지 잘 모르겠습니다. 일반적인 방법은 CPU 또는 마더 보드 ID 정보를 사용하는 것입니다.
다음은 관련 WMI 스크립트 코드가 포함 된 포럼 게시물에 대한 링크입니다. http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic59274.aspx
Windows 설치를 식별하려는 경우 운이 좋지 않을 수 있습니다. 회사 환경에서 워크 스테이션은 종종 설치된 이미지가 아닙니다. 이 이미지로 구축 된 각 컴퓨터는 동일합니다.
설명에 가장 가까운 것은 시스템의 SID이지만 두 가지 이유로 작동하지 않습니다.
이 식별자가 무엇입니까? 가장 좋은 방법은 가능하다면 직접 생성하는 것입니다.
최소한 전 세계적으로 독특하고 영구적 인 MAC 주소를 사용해 볼 수 있습니다. 이것은 너무 귀찮게하지 않고 컴퓨터의 IP와 호스트 이름을 얻을 수 있다는 좋은 이점이 있습니다 (Windows로 제한되지 않아야 함). 레지스트리에 있어야한다는 요구 사항을 충족하지는 않지만 대신 WMI를 사용할 수 있습니다.
샘플 스크립트는 다음과 같습니다. http://www.winforums.com/showthread.php?t=8842
특정 머신에서 머신 SID를 확인하기 위해 SysInternals PSGETSID % COMPUTERNAME % $을 실행할 수 있습니다. (도메인 SID).
http://blogs.msdn.com/aaron_margosis/archive/2009/11/05/machine-sids-and-domain-sids.aspx
편집 : 레지스트리에서 컴퓨터 SID에 대한 참조를 제거했습니다. 고유하지 않거나 정확하지 않을 수도 있습니다.
전 세계적으로 Windows 설치를 고유하게 식별하는 방법을 찾아야합니다. 먼저 백업 이미지를 올바르게 분류하고 식별하고 어떤 머신에서 어떤 이미지를 복구할지 결정합니다. 둘째, 파일 동기화를위한 동기화 쌍의 이름을 지정하고 동기화에 관련된 머신에 따라 사용할 동기화 쌍을 결정합니다.
이 웹 사이트의 게시물을 포함하여 여러 게시물을 읽은 후에는 전 세계적으로 고유 한 Windows 설치 식별자를 찾을 수있는 쉬운 방법이 없다고 결론을 내 렸습니다. 너무 나쁘다. 하드웨어와 마찬가지로 소프트웨어에도 고유 한 일련 번호가 있어야합니다. 오 잘! 이에 대한 해결 방법은 다음과 같습니다. 하나의 글로벌 고유 식별자를 찾는 대신 Microsoft가 Windows에서 네트워크 드라이브 이름을 지정하는 방식과 가상 PC에서 공유 폴더 이름을 지정하는 방식에서 영감을 얻은 양식화 된 문장을 작성했습니다. "[WINDOWS PRODUCT ID ( 변수로 )] [컴퓨터 일련 번호에 설치 ( 변수로))]. "Windows 제품 식별 번호는 해당 제품 키가있는 경우에만 고유하지만 여러 설치, 특히 공장에서 설치된 Windows가 포함 된 대량 생산 컴퓨터에서 일련 번호가 동일하지만 일련 번호는 동일합니다. 번호는 고유하고 기계마다 다릅니다. 위에서 언급 한 공식은 제가 목적으로 필요한 전부입니다 .SID가 필요하지 않습니다 ( 보안 식별자를 나타내는 것으로 가정합니다)) 또는 더 복잡한 것입니다. 두 변수의 조합은 정확히 식별 해야하는 Windows 설치를 참조하지만 각 개별 변수는 나에게 소용이 없기 때문입니다. 구체적으로 그리고 첫째, Windows 제품 식별은 동일한 제조업체에서 제조 한 컴퓨터에서 동일하고 동일한 제품 라인에 있으며 동일한 여러 시스템을 소유하고 있기 때문에 아무런 목적이 없습니다. 둘째, 일련 번호는 컴퓨터 일련 번호로 해결할 수없는 여러 컴퓨터를 한 컴퓨터에 설치하기 때문에 고유하게 식별 할 수 없습니다. 그러므로 나는 나의 방법을 제안한다.
또한, 당신이 그것에 대해 문의하기 전에 : 나는 컴퓨터 이름을 기반으로 내 방법을 사용하지 않기로 결정했습니다. 정보는 사용자 기반이므로 인벤토리를 작성해야합니다. 그러나 Windows 제품 식별 및 컴퓨터 일련 번호는 이미 식별되어 인벤토리에 있으며 두 특정 제품에 항상 연결되어 있으므로 재고를 다시 확보 할 필요가 없습니다. 특히 드라이브 용량이 일정한 플럭스 상태에있을 때 한 시스템에서 다른 시스템으로 전환 할 수 있기 때문에 고유 한 하드 드라이브 식별자로 Windows 설치를 식별하지 않을 것입니다. 마찬가지로, Shoeless 의 이전 답변에서 제안했듯이 중앙 처리 장치 또는 마더 보드의 식별 명명법을 훨씬 덜 사용합니다.. 마지막으로, 나는 Windows 설치를 식별하는 가장 확실한 옵션을 거부합니다 (제품 키를 사용하여 다른 사람이 언급하지는 않았지만). 고유하지만 특정 버전의 Windows를 설치하는 것은 라이센스 일뿐입니다. 실제로 특정 Windows 설치에 연결되어 있지 않으며 특정 컴퓨터를 구입하여 라이센스가 부여 되었음에도 불구하고 특정 컴퓨터에 설치되어있는 것과 구별되지 않습니다.