3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(JavaScript,ActiveX)WSHを使ってコンピュータ名とWindowsユーザ名を取得する

イントラネット向けのWEBサイトを作っており、Windowsユーザ名を取得する必要が出てきました。

(アクセス元IPアドレスを収集してもいいんですが、それだとターミナルサーバ使っている場合にどのユーザかわからないので。。。)

クライアントのブラウザはIEで統一しているので、ブラウザ上でJScriptを走らすことで取得できます。

以下のような感じです。

//ユーザ名、コンピュータ名取得

if(navigator.appName=="Microsoft Internet Explorer"){

try {

var objNetWork = new ActiveXObject("WScript.Network");

alert("コンピュータ名" + objNetWork.ComputerName);

alert("ユーザ名" + objNetWork.UserName);

//JQueryを使ってinput要素のvalueに値追加

$("#computer_name").val(objNetWork.ComputerName);

$("#win_user_name").val(objNetWork.UserName);

objNetWork = null;

} catch(e) {

//安全が保障されないActiveXを生成する際に例外が投げられる

alert('セキュリティ設定が高すぎるため実行ない。');

}

}

しかし、デフォルトの設定で上記を走らしても、動きません。

IEで以下の設定をする必要があります。

インターネットオプション→セキュリティタブで、上記スクリプト使用サイトが、ローカルイントラネットもしくは、信頼済みサイトゾーンにいることを確認。

属しているゾーンの "レベルのカスタマイズ" で、"スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行" を有効にする。

しかし、IE以外では動かないのが難点ですね。

参考:

ActiveXが利用出来ない場合の見分け - まっしかく備忘録

上級ユーザー向けの Internet Explorer セキュリティ ゾーン関連のレジストリ エントリ

訪問者のブラウザやOS情報を取得、ブラウザ判定|window.navigatorオブジェクト|JavaScript/DOM