連載
» 2007年12月27日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第14回 WshShellオブジェクトを利用する(3) (4/4)

[牟田口大介(Microsoft MVP Windows Server - Admin Frameworks),著]
前のページへ 1|2|3|4       

環境変数の取得/設定/削除を行うEnvironmentプロパティとWshEnvironmentオブジェクト

 環境変数の取得/設定/削除を行うには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システム環境変数の値を取り出している。結果は例えば次のようになる。

WshEnvironmentコレクションの利用例
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環境で動作させるにはレジストリへのアクセスを含むので管理者権限が必要となる。

 そのスクリプトを一からこれまでの知識で書いてみよう。

CHECK!

マーカーで隠れたところを選択してチェックしてみよう。


Option Explicit

Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")

objWshShell.Environment("System")("Path") = _
objWshShell.Environment("System")("Path") & ";C:\script"

Set objWshShell = Nothing

 どうだろうか? 書けただろうか。もっといい書き方があるぞ! という声もあるだろう。ぜひいろいろな書き方を考えてみてほしい。なお設定を元に戻すには、マイ・コンピュータの「プロパティ」から「システムのプロパティ」を開き、詳細設定タブで「環境変数」ボタンをクリックしてPath環境変数の値を編集するとよい。無論スクリプトでやってもいいが、失敗しないように!

 WshShellオブジェクトの話はこれで終わりである。次回からは、ネットワークやファイルシステムといったリソースにアクセスするオブジェクトを紹介していく予定である。それでは皆様、よいお年を。


「基礎解説 演習方式で身につけるチェック式WSH超入門」のインデックス

基礎解説 演習方式で身につけるチェック式WSH超入門

前のページへ 1|2|3|4       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。