• ベストアンサー

username以外でログイン名を知る方法

質問の仕方が良くなかったので、質問タイトル並びに質問内容を変更します(古い方の質問は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を変更せずに実行出来る方法があれば教えて頂けませんでしょうか?

  • VAN613
  • お礼率82% (141/170)

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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 といった具合でよさそうです

VAN613
質問者

お礼

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

その他の回答 (4)

回答No.4

WMIで、以下のはどうでしょう 現在ログオン中のユーザーを取得する http://www.wmifun.net/sample/win32_computersystemc.html

VAN613
質問者

お礼

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

VAN613
質問者

補足

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

回答No.3

 No2です。  古いほうの質問を後から見ました。  やりたいことは、ATコマンドで動いたプログラムで、 デスクトップでログオンしているユーザがいるかを判断し いればそのユーザ名を知りたいのですね。  失礼しました。

回答No.2

 ATコマンドで動いているプログラムはSYSTEMのアカウントで 動いているから、USERNAMEはSYSTEMになると思います。  ユーザ名を指定したかったら、ATコマンドではなくタスクで アカウントを指定すればいいのではないでしょうか。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

これって 環境変数のUSERNAMEが『System』に変更された って事でしょうか? Set WshNetwork = WScrpt.CreateObject("WScript.Network") UserName = WshNetwork.UserName で取得してみてはいかがでしょう ローカルでログオンしているユーザー名ですよね …

VAN613
質問者

お礼

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

VAN613
質問者

補足

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

関連するQ&A

  • VBSについて

    VBSの中でDOSのコマンドを実行したいのですが、VBS内で使用した変数を Runで使うことはできないのでしょうか? ################################################ Set WSHShell = CreateObject("WScript.Shell") x = "C:\Documents and Settings\user" WSHShell.Run "cmd.exe /K dir x" ################################################ たとえば上記のようなプログラムを作ったときに最終行のcmd.exeの 実行で変数xを使用したいのですが、可能でしょうか? このまま実行するとコマンドプロンプトの窓が開いて「ファイルが見つかりません」と表示されてしまいます。 何か方法があればご教授ください。よろしくお願いします。

  • マシンの再起動とWindowsの再起動の違いは?

    マシンの再起動とWindowsの再起動では、どういう違いがあるんでしょうか? お願いします http://tclock2ch.hp.infoseek.co.jp/storeroom.htm マシンの再起動-Reboot.vbs Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run "C:\WINDOWS\RUNDLL32.EXE Shell32.dll,SHExitWindowsEx 2" -------------------------------------------------------------------------------- Windowsの再起動-Restart.vbs Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run "C:\WINDOWS\RUNDLL.EXE USER.EXE,ExitWindowsExec"

  • Runメソッドで実行したコマンドプロンプトの結果を1行ずつ取得する方法

    Runメソッドで実行したコマンドプロンプトの結果を1行ずつ取得する方法を教えてください。 pingの実行結果を1行ずつ取得したいのですがどうも上手く行きません。 Set WshShell = WScript.CreateObject("WScript.Shell") Set objWshScriptExec = WshShell.exec("ping 192.168.0.1") Set objStdOut = objWshScriptExec.StdOut strLine = objStdOut.ReadLine execメソッドを使用するのであればこんな感じで1行取得することが出来るかと思いますが、窓の非表示で同じことをやりたいので同じことをRunメソッドにて取得できればいう希望からの質問でした。 どうぞよろしくお願い致します。

  • 緊急です。Wscriptで・・・

    IIS上にあるASPファイルからWscriptを呼び出して、VBで作成したEXEを実行させたいのですが、上手くいきません。コマンドプロンプトから実行させると上手くいくのですが、どうしてでしょうか?ASPはIIS上にあり、test.exeを実行すると別サーバにファイル(例 \\サーバ名\bbb\OK.txt)を作成するといったプログラムです。UNCパス指定だからでしょうか?よろしくお願いします。 ASPファイル内容--------- <%@ language="VBScript"%> <html> <body> テストASP <% Dim WshShell Set WshShell = Server.CreateObject("WScript.Shell") WshShell.Run "\\サーバ名\aaa\test.exe" , 0 , false Set WshShell = Nothing %> </body> </html>

  • Java でイントラのネットワーク名

    Java でイントラのネットワーク名を取得する方法を教えてください。 VBSで言うと: objWshNetwork = WScript.CreateObject("WScript.Network") objWshNetwork.UserName ということなのですが、これと同様に、UserNameをJavaで取得する 方法が知りたいです。 自分でやってみた方法として: import java.net.InetAddress; address = InetAddress.getLocalHost(); address.getHostName() という感じで取得するといった方法があるのですが、 これだと、hostnameを取得して、上記のネットワーク名 は取得できないような気がします。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JP1からvbs(PSExec)が起動できない

    突然失礼します。 以下のサーバーAにあるvbsを、JP1から起動しようとしていますが、うまく起動しないので、もし原因が分かる方がいたら、ご教授願いたいです。 起動しようとしているサーバーAの「test.vbs」は、簡単に言うと、PsExecを利用して、サーバーBの「hoge.bat」を実行する内容です。 ***test.vbs*** Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "PsExec.exe サーバーBIPアドレス -u 実行ユーザ -p 実行ユーザーパスワード cmd" WshShell.AppActivate "cmd " WScript.Sleep 3000 WshShell.SendKeys "cd C:\" WshShell.SendKeys "{enter}" WshShell.SendKeys "hoge.bat" WshShell.SendKeys "{enter}" WScript.Sleep 10000 WshShell.AppActivate "cmd" WshShell.SendKeys "exit" WshShell.SendKeys "{enter}" ************************ 上記バッチを手動で実行するとうまくいくのですが、 JP1で起動しようとすると、うまくいきません。 そもそもPsExecが実行出来ていないかも。。。。 宜しくお願いします。

  • URLが開いた後に処理したい

    VBSでIEを起動しURLが開いた後に処理をするにはどうすればいいですか? たとえば、 set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""&" www.google.co.jp/" 'グーグルが開いた後に処理 WshShell.SendKeys "検索ワード~" これで開いたタイトルは「Google - Microsoft Internet Explorer」になります。 今まではSleep関数を使っていましたが、 IEの起動時間はバラバラなので早すぎたり遅すぎたりしてしまいます。 よろしくお願いします。

  • VBSでバッチを実行できません。

    C:\temp\test.batをVBSで実行しようとするのですが、 何度やっても実行されません。 想像ですが、c:\WINNT\System32\cmd.exeが動いている ようなのですが、肝心のC:\temp\test.batが動きません。 以下のように記述しました。 Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run ("cmd /c c:\temp\test,0,True") WIN2K、IE6.0の環境です。 どこか記述に誤りでもあるのでしょうか? どうぞよろしくお願いいたします。

  • vbsのショートカット作成で、引数に不具合がでる

    あるプログラムに対し、ショートカットを vbsで作成したいのですが、 リンク先の引数で不具合が発生します。 具体的には KeePassというアプリケーションで、 Database.kdeを開き、パスワードにpassを指定する、というものです。 "C:\...\KeePass.exe" "Database.kdb" -pw:"pass" vbsのソースはこちらです ------------------------------------------------------------ Dim WshShell, fso, ShrCut Set WshShell = WScript.CreateObject("WScript.Shell") Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set ShrCut = WshShell.CreateShortcut(WSHShell.CurrentDirectory & "\KeePass.lnk") ShrCut.TargetPath = WSHShell.CurrentDirectory & "\KeePass.exe"" ""Database.kdb"" -pw:""pass" ShrCut.WorkingDirectory = WSHShell.CurrentDirectory ShrCut.IconLocation = WSHShell.CurrentDirectory & "\KeePass.exe" ShrCut.Save ------------------------------------------------------------ ショートカット作成後に実行すると、"passを探しています と表示されますが、 ショートカットのプロパティを開き、リンク先をコピペで更新すると、動作します。 宜しくお願い致します。

  • VBScript

    下記、プログラムを実行すると、コマンドプロンプトの画面が 消えずに、そのまま残ってしまいます。 どうしたら、画面を消すことができるでしょうか。 お力添えをお願いいたします。 Set WshShell = Wscript.CreateObject("WScript.Shell") Set WshEnv = WshShell.Environment("user") WshEnv("C:\NET\aaa.txt") = "administrator" Wshshell.Run("cmd.exe") WScript.Sleep(500) WshShell.SendKeys("runas /user:administrator " + chr(34) + "xcopy D:\NET\aaa.txt C:\NET\aaa.txt" + chr(34)) WshShell.SendKeys("{Enter}") WScript.Sleep(500) WshShell.AppActivate "C:\WINDOWS\system32\runas.exe" WshShell.SendKeys("XXXXX") WshShell.SendKeys("{Enter}") WScript.Sleep(500)

専門家に質問してみよう