dポイントプレゼントキャンペーン実施中!

質問の仕方が良くなかったので、質問タイトル並びに質問内容を変更します(古い方の質問は24時間経過後に削除します)。
http://oshiete1.goo.ne.jp/qa4323599.html

VBSにて
Set WshShell = Wscript.CreateObject("WScript.Shell")
UserName = WshShell.ExpandEnvironmentStrings("%USERNAME%")
とする事でログイン名を取得出来る事は分かったのですが、プログラムの実行をATコマンドで行った場合、USERNAMEがSYSTEMに変更されてしまうようで困っています。
プログラムの実行をATコマンドで行った場合でも問題なくログイン名を取得出来る方法か、もしくは一日100回平日繰り返しのタスク実行をUSERNAMEを変更せずに実行出来る方法があれば教えて頂けませんでしょうか?

A 回答 (5件)

どうもタスクから ログオンユーザー名を取得するのは難しそうです



WMIにしても『SYSTEM』または特定のユーザー名でしか取得できないようです

Windowsのコントロールパネル > タスクを開いて
詳細設定 > ATサービスを実行するアカウント
でタスクを実行するアカウントの設定は可能ですが
ログオンしているユーザーアカウントとは無関係になってしまいます

WMIのScriptコードは
dim locator, Service, CsSet, Cs
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set CsSet = Service.ExecQuery("Select * From Win32_ComputerSystem")
For Each Cs In CsSet
WScript.Echo Cs.UserName
Next
といった具合でよさそうです
    • good
    • 0
この回答へのお礼

ひとまず自宅のパソコンでは意図した通りの動作をしました!どうもありがとうございます。
ただ、多分大丈夫だと思いますが、実際にプログラムを実行するパソコンでも確認しておきたいので、ひとまず連休明けまで回答締め切りを保留させて下さい。

お礼日時:2008/09/14 15:15

WMIで、以下のはどうでしょう



現在ログオン中のユーザーを取得する
http://www.wmifun.net/sample/win32_computersyste …

この回答への補足

すみません。WMIというもの自体がよく分かっていないのですが、これはVBのソースでは無いでしょうか?出来ればVBSのソースを教えて頂きたいのですが・・・。

補足日時:2008/09/14 06:19
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。また分かりにくい質問の仕方をしてしまい申し訳ございませんでした。質問の経緯としては以下の流れです。
(1)当初、VBSにて10分置きに100回処理を行うプログラムを作成し、それをタスクで平日繰り返し実行させようと思っていた
(2)しかし、数十台あるPCにタスクの設定を行うのが面倒であり、かつタスクでVBSを実行した場合、1度誰かがログアウトするとその日の処理が終わってしまう事が判明
(3)そこで、(1)のプログラムを1回だけ処理を行うプログラムに修正し、そのプログラムをATコマンドにて繰り返し処理を行うようなBATファイルを作成
(4)しかしその場合、ATコマンドを実行する際は誰がログインしていようと環境変数USERNAMEがSYSTEMに切り替わる事が判明

連休明けに試してみます。

お礼日時:2008/09/14 05:55

 No2です。



 古いほうの質問を後から見ました。

 やりたいことは、ATコマンドで動いたプログラムで、
デスクトップでログオンしているユーザがいるかを判断し
いればそのユーザ名を知りたいのですね。

 失礼しました。
    • good
    • 0

 ATコマンドで動いているプログラムはSYSTEMのアカウントで


動いているから、USERNAMEはSYSTEMになると思います。

 ユーザ名を指定したかったら、ATコマンドではなくタスクで
アカウントを指定すればいいのではないでしょうか。
    • good
    • 0

これって 環境変数のUSERNAMEが『System』に変更された って事でしょうか?



Set WshNetwork = WScrpt.CreateObject("WScript.Network")
UserName = WshNetwork.UserName
で取得してみてはいかがでしょう

ローカルでログオンしているユーザー名ですよね …

この回答への補足

ひとまず自宅のPCで試してみましたが、やはりこの場合もVBSを直接叩いた場合は正常に動作するものの、ATコマンドで実行すると『System』になってしまうようです。。

補足日時:2008/09/14 06:16
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。連休明けに試してみます。

お礼日時:2008/09/14 05:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!