環境変数の取得/設定/削除を行うにはEnvironmentプロパティを用いる。このEnvironmentプロパティは環境変数のリストが含まれたWshEnvironmentコレクションを返すが、引数に次のような環境変数の種類を指定できる。
引数に指定できる文字列 | 環境変数名 | 説明 |
---|---|---|
System | システム環境変数 | すべてのユーザーに適用される |
User | ユーザー環境変数 | ユーザーごとに設定可能 |
Volatile | 揮発性環境変数 | ログオフとともにクリアされる |
Process | プロセス環境変数 | 現在読み込まれているすべての環境変数。読み込み専用 |
Environmentプロパティに指定する引数 |
引数を省略した場合、Windows 9x OS系では“Process”が、Windows NT OS系(Windows XP/Windows Vista/Windows Server 2003など)では“System”が指定されたことになる。
実際に環境変数の一覧を取得するスクリプトを実行してみよう。
Option Explicit
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
Dim objEnvironment, strEnvironment, strOutput
strOutPut = ""
'WshEnvironmentコレクションを変数に格納
Set objEnvironment = objWshShell.Environment
'コレクションの値を列挙
For Each strEnvironment In objEnvironment
strOutput = strOutput & strEnvironment & vbCrLf
Next
MsgBox strOutput
Set objEnvironment = Nothing
Set objWshShell = Nothing
このスクリプトを実行するとEnvironment プロパティに引数を与えていないのでWindows XPではシステム環境変数を取得し、次のような結果が得られる。
「環境変数名=環境変数の値」という文字列形式で、システム環境変数の一覧リストが得られた。ここから環境変数名と環境変数の値を分離するには、Split関数を使って次のようにする。
strEnvironmentName = Split(strEnvironment,"=")(0)
strEnvironmentValue = Split(strEnvironment,"=")(1)
ほかの環境変数、例えばプロセス環境変数の一覧を得るには、
Set objEnvironment = objWshShell.Environment
という行を変更し、次のように引数付きで表記する。
Set objEnvironment = objWshShell.Environment("Process")
環境変数名からその値を取り出すのはWshSpecialFoldersオブジェクトと同様Itemプロパティ(既定プロパティなので省略可)を使う。
Option Explicit
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
'WshEnvironmentコレクションを変数に格納
Dim objEnvironment
Set objEnvironment = objWshShell.Environment
MsgBox objEnvironment.Item("PROCESSOR_IDENTIFIER")
Set objEnvironment = Nothing
Set objWshShell = Nothing
ここではCPUの種類を抜き出すために、PROCESSOR_IDENTIFIERシステム環境変数の値を取り出している。結果は例えば次のようになる。
さて環境変数は、プロセス環境変数以外では、環境変数の追加や削除、値の変更も可能である。ここではVolatile環境変数にダミーの値を書き込み、削除するデモをお見せする。
Option Explicit
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
'WshEnvironmentコレクションを変数に格納
Dim objEnvironment
Set objEnvironment = objWshShell.Environment("Volatile")
objEnvironment("CVS01") = "Hatsune Miku" '環境変数名に値を代入
MsgBox objEnvironment("CVS01") '環境変数の値を表示
objEnvironment.Remove "CVS01" '環境変数の削除
Set objEnvironment = Nothing
Set objWshShell = Nothing
このスクリプトにおいては揮発性環境変数名“CVS01”に値“Hatsune Miku”を書き込み、それを表示している。その後環境変数を削除しているので、この行以後このスクリプト内でこの環境変数を参照しようとするとエラーになる。このスクリプトを実行すると、次のようになる。
最後に問題を出そう。システム環境変数のPath(通っているパスの一覧が含まれている)に“;C:\script”を追加するという少し実用的な例を考えてみてほしい。なおこのスクリプトをWindows Vista/Windows Server 2008環境で動作させるにはレジストリへのアクセスを含むので管理者権限が必要となる。
そのスクリプトを一からこれまでの知識で書いてみよう。
どうだろうか? 書けただろうか。もっといい書き方があるぞ! という声もあるだろう。ぜひいろいろな書き方を考えてみてほしい。なお設定を元に戻すには、マイ・コンピュータの「プロパティ」から「システムのプロパティ」を開き、詳細設定タブで「環境変数」ボタンをクリックしてPath環境変数の値を編集するとよい。無論スクリプトでやってもいいが、失敗しないように!
WshShellオブジェクトの話はこれで終わりである。次回からは、ネットワークやファイルシステムといったリソースにアクセスするオブジェクトを紹介していく予定である。それでは皆様、よいお年を。
Copyright© Digital Advantage Corp. All Rights Reserved.