Hey, Scripting Guy!

Hey, Scripting Guy!

TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

今日の質問 : スクリプトを使用して GUID を作成することはできますか。


スクリプトを使用して GUID を作成することはできますか

Q

Scripting Guy さん、よろしくお願いします。ある項目を一意の識別番号を使って追跡する必要があります。上司から、識別番号として GUID を使用してはどうかと言われています。スクリプトを使用して GUID を作成することはできますか。

-- DX

A

DX さん、こんにちは。GUID (グローバル一意識別子) は、まさにそのような目的に最適な手段の 1 つです。GUID を生成するアルゴリズムについて知ったかぶりをするつもりはありませんが、生成される GUID が一意であることは、ほぼ確実です。重複する GUID を生成することも理論的には可能ですが、それはビル ゲイツ氏が全財産を Scripting Guys に投じることと同じ程度です。どちらの可能性も考えるに値しないでしょう。

GUID を生成する実に簡単な方法がありますが、それは姑息な手段と思われそうなものです (実際にはそうではなくて、"思われそう" というだけです)。Scriptlet.TypeLib オブジェクトを使用すると、Windows スクリプト コンポーネント (スクリプトを COM オブジェクトのように動作させる手段) を作成することができます。Scriptlet.Typelib オブジェクトには Windows スクリプト コンポーネント タイプ ライブラリで使用できる GUID を生成するメソッドがあります。しかし、このメソッドで他の目的に使用する GUID を生成できないわけではありません (何に使用しようと GUID は GUID です)。GUID が必要な場合は、次のような 2 行だけのスクリプトで生成できます。

Set TypeLib = CreateObject("Scriptlet.TypeLib")
Wscript.Echo TypeLib.Guid

簡単だと思いませんか。もちろん、このスクリプトは GUID をメッセージ ボックスに出力するだけです。生成された GUID をどこか別の場所で使用する場合は、そこに GUID を入力する必要があります。これについては問題ないと思います。ただし、GUID が次のようなものでなければの話ですが。

{24DD18D4-C902-497F-A64B-28B2FA741661}

そこで、私たちは気前よく自分勝手に、このスクリプトを少し修正しました。このスクリプトも GUID を生成しますが、その後、生成した GUID をメッセージ ボックスに表示するのではなく、クリップボードにコピーします。

Set TypeLib = CreateObject("Scriptlet.TypeLib")
strGUID = TypeLib.Guid

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", strGUID
objIE.Quit

なぜそんなことをするのかと思っているかもしれませんが、またしても姑息な手段を使ってしまいました。VBScript では項目をクリップボードにコピーすることはできませんが、Internet Explorer ではそれが可能です。そこで、GUID を生成し、その値を strGUID という変数に格納します。次に、Internet Explorer の非表示のインスタンスを作成し、clipboardData.SetData メソッドを使用して GUID をクリップボードにコピーします。それを実行するのが次のコード行です。

objIE.document.parentwindow.clipboardData.SetData "text", strGUID

Internet Explorer を終了します。これで、GUID をどのような場所にでも貼り付けて、使用することができます。


関連情報

Hey, Scripting Guy! - アーカイブ もチェックしてください。

ページのトップへページのトップへ