PowerShell.Net 을 사용 하여 컴퓨터 의 UUID 가 져 오기

5496 단어 powershell.netuuid
UUID 의 미 는 범용 유일한 식별 코드(Universally Unique Identifier)로 소프트웨어 구축 의 기준 이자 오픈 소스 소프트웨어 재단(Open Software Foundation,OSF)의 조직 이 분포 식 컴 퓨 팅 환경(Distributed Computing Environment,DCE)분야 에 응용 되 는 부분 이다.
결성
UUID 는 한 기계 에서 생 성 되 는 숫자 로 같은 시간 공중 에 있 는 모든 기계 에 유일한 것 을 보장 합 니 다.보통 플랫폼 에 서 는 생 성 된 API 를 제공 합 니 다.오픈 소프트웨어 재단(OSF)이 제정 한 표준 에 따라 계산 하면 이 더 넷 카드 주소,나 초 급 시간,칩 ID 코드 와 가능 한 많은 숫자 를 사용 했다.
UUID 는 다음 과 같은 몇 가지 부분 을 조합 합 니 다.
(1)현재 날짜 와 시간,UUID 의 첫 번 째 부분 은 시간 과 관련 이 있 습 니 다.UUID 를 생 성 한 후 몇 초 후에 UUID 를 생 성 하면 첫 번 째 부분 이 다 르 고 나머지 는 같 습 니 다.
(2)시계 시퀀스.
(3)전역 에서 유일한 IEEE 기기 식별 번 호 는 네트워크 카드 가 있 으 면 네트워크 카드 MAC 주소 에서 얻 을 수 있 고 다른 방식 으로 얻 을 수 있 는 네트워크 카드 가 없다.
UUID 의 유일한 결함 은 생 성 된 결과 열 이 비교적 길 다 는 것 이다.UUID 라 는 표준 에 대해 가장 보편적으로 사용 되 는 것 은 마이크로소프트 의 GUID(Globals Unique Identifiers)다.ColdFusion 에 서 는 CreateUUID()함수 로 UUID 를 간단하게 생 성 할 수 있 습 니 다.그 형식 은 xxxxxxxx-xxxx-xxxxxxxxxxxxxxxxxxxxxx(8-4-4-16)이 고 그 중에서 각 x 는 0-9 또는 a-f 범위 내의 16 진법 의 숫자 입 니 다.표준 UUID 형식 은 xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxx(8-4-4-12)로 cflib 에서 CreateGUID()UDF 를 다운로드 하여 변환 할 수 있 습 니 다.
이상 내용 은 바 이 두 백과 에서 발췌
소프트웨어 제품 에서 하드웨어 코드 와 연결 해 야 하기 때문에 UUID 가 생각 났 습 니 다.바 이 두 를 통 해 인터넷 에서 한 무더기 검색 한 결과 대부분의 코드 가 다음 과 같 습 니 다.
인용 필요:System.Management;

string processor = "Win32_Processor";//  
ManagementClass driveClass= new ManagementClass(processor);
Console.WriteLine(driveClass.GetQualifierValue("UUID")); 
그리고 우리 부서 의 모든 동료 들 로 하여 금 각자 의 컴퓨터 에서 한 번 운행 하 게 하 였 는데 결 과 는 다음 과 같다.

모든 운행 결 과 는 같 습 니 다.왜 그 럴 까요?지금도 모 르 겠 지만 달 갑 지 않 아 계속 구 글 검색)
나 는 구분자
쿵 푸 는 마음 을 품 지 않 았 다.나중에 자 료 를 찾 아 보 니 Windows PowerShell 도 UUID 를 얻 을 수 있 었 다.PowerShell 에 대해 잘 모 르 지만 핵심 은 내 문 제 를 해결 할 수 있 느 냐 없 느 냐 하 는 것 이다.
Windows PowerShell 은 명령 행 케이스 프로그램 과 스 크 립 트 환경 으로 명령 행 사용자 와 스 크 립 트 작성 자가.NET Framework 의 강력 한 기능 을 사용 할 수 있 도록 합 니 다.
이것 은 매우 유용 한 새로운 개념 을 많이 도입 하여 윈도 명령 프롬프트 와 윈도 스 크 립 트 호스트 환경 에서 얻 은 지식 과 만 든 스 크 립 트 를 더욱 확장 시 켰 습 니 다.
우선,운영 체제 에 PowerShell 이 시스템 에 설치 되 어 있 음 을 보증 해 야 합 니 다.또한 Vs 개발 프로젝트 에 서 는 System.Management.Automation.dll 을 참조 해 야 합 니 다.이 dll 은 제 컴퓨터 아래 경로 에 있 습 니 다."C:\windows\assembly\GACMSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e 35\",본 컴퓨터 운영 체제:Win 7 핵심 코드 는 다음 과 같 습 니 다:

private static string GetUUID()
{
try
{
string uuid = string.Empty;
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("(get-wmiobject Win32_ComputerSystemProduct).UUID"); //OK
Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
foreach (PSObject outputItem in PSOutput)
{
if (outputItem != null)
{
uuid += outputItem.BaseObject.ToString();
}
}
}
return uuid;
}
catch
{
return string.Empty;
}
}
그 호출 은 사실 PowerShell 의 Script 를 사용 하여 가 져 오 는 것 입 니 다.PowerShell 을 호출 할 때 느 릴 수 있 기 때문에.net 에서 도 비동기 호출 메커니즘 을 제공 합 니 다.핵심 코드 는 다음 과 같 습 니 다.

private static string GetAsyncUUID()
{
try
{
string uuid = string.Empty;
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("(get-wmiobject Win32_ComputerSystemProduct).UUID"); //OK
PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();
outputCollection.DataAdded += outputCollection_DataAdded;
PowerShellInstance.Streams.Error.DataAdded += Error_DataAdded;
IAsyncResult result = PowerShellInstance.BeginInvoke<PSObject, PSObject>(null, outputCollection);
while (result.IsCompleted == false)
{
Console.WriteLine("Waiting for pipeline to finish...");
Thread.Sleep(1000);
// While                
}
foreach (PSObject outputItem in outputCollection)
{
if (outputItem != null)
{
uuid += outputItem.BaseObject.ToString();
}
}
}
return uuid;
}
catch
{
return string.Empty;
}
} 
static void Error_DataAdded(object sender, DataAddedEventArgs e)
{
Console.WriteLine("An error was written to the Error stream!");
}
static void outputCollection_DataAdded(object sender, DataAddedEventArgs e)
{
Console.WriteLine("Object added to output.");
}
상기 코드 가 실 행 된 후 테스트 를 거 친 후에 부 서 는 중복 되 지 않 았 다.
결 과 는 다음 과 같다.
 
잠시 이상 의 테스트 결과 분석 을 보면 이 방법 은 실행 가능 하 다.그러나 아직도 걱정 되 는 몇 가지 문제 가 있다.
1.PowerShell 은 다른 버 전에 서 호출 하 는 방법 이 다 르 지 않 습 니까?B/s 소프트웨어 로 서 더 많은 Windows 서버 를 고려 해 야 하기 때 문 입 니까?예 를 들 면:(get-wmiobject Win 32ComputerSystemProduct).UUID
2、안전 을 위해 PowerShell 이 서버 에서 비활성화 되 지 않 습 니까?
3.B/s 소프트웨어 는 IIS 가 실행 해 야 하기 때문에 권한 이 부족 한 상황 이 발생 하지 않 습 니까?
위 에서 설명 한 바 와 같이 PowerShell.Net 을 사용 하여 컴퓨터 에 있 는 UUID 에 관 한 지식 을 얻 고 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기