ハードなソフトの話

アクセスカウンタ

zoom RSS Windowsの環境変数について少し詳しく(5)〜プロセス環境変数〜

<<   作成日時 : 2009/07/31 23:23   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

前回と同様に1回目で使ったスクリプトで、
cscript //nologo env.vbs | find /i "Process :"
とすると、コマンドプロンプトで "Set"と入力した場合とほぼ同じになるので省略する。Setで表示されないのは変数名が"="で始まる次の変数。
Process : =::=::\
Process : =C:=C:\Users\username
Process : =ExitCode=00000001
Process : =P:=P:\script\sandbox

%〜%で囲めば、普通の環境変数と同じように展開される。
=P と =C はそれぞれP:ドライブとC:ドライブのカレントディレクトリである。
=ExitCodeはどうやらWScript.Shell.Environment の ExitCodeプロパティの値と思われる。
ほとんどの場合プロセス環境変数はシステム、ユーザー、ボラティル環境変数のコピーである。
しかし、他にも例外がある。次のスクリプト(envlist.vbs)は、環境変数名、System、User、Process、Volatileをタブ区切りテキストで出力する。
option explicit
dim wshell,typelist,dicEnv
typelist = array("System","User","Process","Volatile")
set wshell = createobject("WScript.Shell")
set dicEnv = createobject("Scripting.Dictionary")

data_make
data_list

sub data_make
    dim eType,eVarStr,dicVar
    for each eType in ( typelist )
        for each eVarStr in wshell.environment(eType)
            dim name, value, ix
            ix    = instr(eVarStr,"=")
            name  = trim(left(eVarStr,ix-1))
            value = mid(eVarStr,ix+1)
            if len(name) > 0 then
                if not dicEnv.exists(name) then
                    dicEnv.add name, nothing
                    set dicVar = createobject("Scripting.Dictionary")
                    set dicEnv(name) = dicVar
                else
                    set dicVar = dicEnv(name)
                end if
                dicVar(eType) = value
            end if
        next
    next
end sub

sub data_list
    wsh.echo "Name" & vbTab & join(typelist,vbTab)
    dim strLine,vname,tname,dicVar,value
    for each vname in dicEnv
        strline = vname
        set dicVar = dicEnv(vname)
        for each tname in typelist
            if dicVar.exists(tname) then value = dicVar(tname) else value = "_" 
            strline = strline & vbTab & value
        next
        wsh.echo strline
    next
end sub

このスクリプトの出力を次のようにコマンドラインで入力してファイルにリダイレクト出力すると、環境変数の表になる。
cscript //nologo envlist.vbs > envlist.tsv

Logparserを使ってGUIに全件出力するときは次のようにする
logparser -i:tsv -o:datagrid -rtp:-1 "select * from envlist.tsv"

さて、Process型環境変数だけに存在する環境変数はなんだろう?
未定義のデータは "_" を使っているので Logparser で次のように入力する。
logparser -i:tsv -o:datagrid -rtp:-1 "select name, system, user,process,volatile from envlist.tsv where system='_' and user='_' and volatile='_' "

出力結果は次のようになる
画像

これらの環境変数が自動的にシステムによって生成されているらしい。
事前定義(Predefined)環境変数とでも呼ぶべきか?

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Windowsの環境変数について少し詳しく(5)〜プロセス環境変数〜 ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる