PowerShell.Net 을 사용 하여 컴퓨터 의 UUID 가 져 오기
5496 단어 powershell.netuuid
결성
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 에 관 한 지식 을 얻 고 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Powershell 7을 사용하여 Samba 서버로 파일을 전송하는 방법.MSSQL 덤프를 복사하여 콜드 스토리지 솔루션으로 원격 Linux Samba 서버에 저장하도록 설계한 twoScripts를 공유하고 싶습니다. 모든 서버가 Windows 서버였으며 내가 이것을 만들기로 결정한 이유...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.