Home > Windows にまつわる e.t.c.

PowerShell で UUID(GUID)を大量に生成する


UUID (Windows では GUID)とは、以下の形式の ID です

092a83d4-f578-4074-ae54-1c7e64953dbd

 

UUID は、数学的に衝突の無いユニーク ID を生成できるので、Windows のオブジェクト名で採用されています

 

従来からシステムで良くやる手は、採番マスターを作ってシステム内で ID がユニーク値になる事を担保していましたが、UUID のを使えば非同期に任意のタイミングで ID を生成しても、数学的にシステム内でのユニーク値が担保されるので、ID 生成が圧倒的に簡素化出来るようになります

難点は人が ID を覚えるのが困難な点ですが、「表に見える名前」を別に付けておけば何とかなります
(Windows もその実装)

 

UUID は、.NET フレームワークで生成がサポートされているので、PowerShell で簡単に生成できます

[guid]::NewGuid()

 

お仕事案件で UUID を手動で大量作成する必要があったので、ワンライナーの PowerShell スクリプト作りました

$UUID = @() ;for($i = 0;$i -lt 1000; $i++){ $UUID += ([guid]::NewGuid()).Guid } ; $UUID | Set-Clipboard

 

コマンドを実行すると、クリップボードに UUID が 1,000個セットされるので、Excel やテキストエディタにペーストしてご利用ください

 

このスクリプトは、1,000個の UUID を生成しますが、生成数は任意数に変更出来ます

矢印の所にある数値が生成数なので、ここの値を変更すれば任意の数の UUID が生成できますが、10,000 とか生成すると結構待たされるので 1,000 辺りが現実的かなと思います
(格納領域を動的拡張しているので、ある一定数を超えると一気に遅くなります)

 

もっと多くの UUID を一度に生成したいのであれば、以下のように string 配列を事前に作っておけば高速化出来ますが、それでも 10,000 辺りが現実的かなと思います

$Num = 10000; $UUID = New-Object string[] $Num ; for($i = 0;$i -lt $Num; $i++){ $UUID += ([guid]::NewGuid()).Guid } ; $UUID | Set-Clipboard

 

参考情報

RFC 4122 - A Universally Unique IDentifier (UUID) URN Namespace

https://datatracker.ietf.org/doc/html/rfc4122

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.