イントラネット向けのWEBサイトを作っており、Windowsユーザ名を取得する必要が出てきました。
(アクセス元IPアドレスを収集してもいいんですが、それだとターミナルサーバ使っている場合にどのユーザかわからないので。。。)
クライアントのブラウザはIEで統一しているので、ブラウザ上でJScriptを走らすことで取得できます。
以下のような感じです。
//ユーザ名、コンピュータ名取得
if(navigator.appName=="Microsoft Internet Explorer"){
try {
var objNetWork = new ActiveXObject("WScript.Network");
alert("コンピュータ名" + objNetWork.ComputerName);
alert("ユーザ名" + objNetWork.UserName);
$("#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