スクリーンセーバーの待ち時間を取得するスクリプト

このQ&Aのポイント
  • 下記のスクリプトを実行すると、ポップアップが5回表示されるのですが、どこから取ってきた値なのか知りたいです。
  • スクリプトを実行すると、デスクトッププロパティから取得できる"スクリーンセーバーの待ち時間"が4回目に表示されます。
  • スクリーンセーバーの待ち時間を取得できるスクリプトです。デスクトッププロパティから取得した値を表示させるため、コードを実行するとポップアップが5回表示されます。必要なのは4回目に表示される"スクリーンセーバーの待ち時間"のみです。
回答を見る
  • ベストアンサー

下記内容のスクリプトを実行すると、ポップアップが

下記内容のスクリプトを実行すると、ポップアップが 5回表示されるのですが、どこから取ってきた値なのか知りたいです。 ※必要なのは4回目に表示されるデスクトッププロパティから  参照できる”スクリーンセーバーの待ち時間”だけです。  出来れば、それのみ表示させたいです。 ****************** On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop") For Each objItem in colItems Wscript.Echo "ScreenSaverTimeout: " & objItem.ScreenSaverTimeout Next ****************** 以上

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

  • ベストアンサー
  • machua
  • ベストアンサー率71% (28/39)
回答No.2

>5回表示されるのですが、どこから取ってきた値なのか知りたいです。 ユーザデスクトップの情報を持ったWMIクラスから取得しており、(あなたのソースの4行目のSELECT文がある個所)存在するユーザのデスクトップ情報を取得しています。これには、システムのユーザも含まれています。(私のソースの末尾から4行目をあなたのソースにコメントを外して追加すると表示されます) ほとんどが4番目に来るようですが、念のためログインユーザがこのスクリプトを実行したときに、目的の情報を表示されるようにしてみました。コメントを参照してください。 ****************** On Error Resume Next strComputer = "." ' ローカルPCのWMIクラスを生成 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") ' ユーザデスクトップの属性を取得(複数ユーザ) Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop") ' 追加:ホスト名とログインユーザ名を取得する Set objNetWork = WScript.CreateObject("WScript.Network") ' 追加:「ホスト名¥ユーザ名」という文字列を作成 userName = objNetWork.ComputerName & "\" & objNetWork.UserName ' ユーザデスクトップの情報を繰り返し処理(複数ユーザの情報があるため) For Each objItem in colItems ' 追加:ログインユーザだったらスクリーンセーバーの待ち時間を表示 if objItem.Name = userName then 'Wscript.Echo "User: " & objItem.Name Wscript.Echo "ScreenSaverTimeout: " & objItem.ScreenSaverTimeout end if Next ******************

fsibomb
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

#あまり詳しくないので"自信なし"アドバイスですが... 一旦、実行中ユーザー名を取得してからobjItem.Nameで判断させると一応取れますが、 これが真っ当なやり方かどうかは知りません。 もっとピンポイントに取れる方法があるのかもしれません? On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objItem In colItems   user = objItem.UserName Next Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop") For Each objItem In colItems   If objItem.Name = user Then     Wscript.Echo "UserName:" & user & vbCrLf & _            "ScreenSaverTimeout: " & objItem.ScreenSaverTimeout   End If Next (参考) http://www.wmifun.net/sample/win32_desktop.html

fsibomb
質問者

お礼

ありがとうございました。

関連するQ&A

  • WSHについて教えてください。

    WSHについて教えてください。 コレクションの最初の要素(オブジェクト)のプロパティを参照したいのですが、やり方がわかりません。 例えば以下のようなWMIのクエリの結果のコレクションの要素(オブジェクト)は1つだけしかありません。 ※ネットワークドライブ V: の情報を得る strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkConnection where LocalName=""V:""",,48) なのにわざわざ For Each objItem in colItems Wscript.Echo "LocalName: " & objItem.LocalName Next のような表現をするのは、いかにも大変です。 For Eachを使わずに、上記の例での colItems の最初の要素(オブジェクト)の LocalName プロパティを取り出すには どのようにコーディングすればいいのでしょうか?

  • WSH/VBScript DHCPの有効設定について

    お世話になっております。 毎度お手数をお掛けしていますが、よろしくお願いいたします。 WSHにてDHCPの有効設定を行ったところ、 WindowsVistaで以下の通り実行すると DHCPは有効になりますが、Staticで設定していたデフォルトゲートウェイのアドレスが残ってしまいます。 WindowsXPで実行するとデフォルトゲートウェイのアドレスは削除されます。 デフォルトゲートウェイの値を削除する方法をお願いいたします。 '----------------------------------- strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\"" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery(_ "SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'" For Each objItem in colItems if objItem.EnableDHCP = False then Return = objItem.EnableDHCP end if Next '----------------------------------- 上記に以下を追加してみましたが正常に動作しませんでした。 arrGateways = Array(Null) objItem.SetGateways(arrGateways) 以上、よろしくお願いいたします。

  • シャットダウンスクリプトの記述

    ドメインに参加している WinXP クライアントから、ワークグループ環境の複数台の Windows Server 2003 (主に) に対して ping を実行し、ping に対して応答があった場合はシャットダウンするスクリプトを記述したいと考えています。 # ワークグループ環境の Windows Server 2003 は検証環境で、社内セキュリティポリシーの運用上ドメインに参加できません。 この場合、 1. 複数のマシンに ping を打つ 2. 1 で応答がかえってくれば管理者の資格情報を使用してログイン 3. シャットダウンを実行 という流れになると思います。 そして、最終的には 1 が成功した場合に If 構文で 2、および、3 を実行する、という ように書けば一連の処理は成功すると考えています。 現在上記 1~3 の処理で細分化し、それぞれについて動作確認をとっています。 しかし、2、および、3 を実行してもうまくいかないため、これらについて伺いたく 質問させていただきます。 2 について 以下の構文を組んでいますが、vbs を実行すると、後述のエラーダイアログが表示されます (対象 PC やアカウント名などはダミーとご認識ください)。 別の資格情報 (接続先マシンの管理者アカウント) を指定して接続できるコードをご教授ください。 ----- Const WbemAuthenticationLevelPktPrivacy = 6 strComputer = "atl-ws-01" strNamespace = "root\cimv2" strUser = "Administrator" strPassword = "4rTGh2#1" Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy Set colItems = objWMIService.ExecQuery ("Select * From Win32_OperatingSystem") For Each objItem in ColItems Wscript.Echo strComputer & ": " & objItem.Caption Next ----- エラー : RPC サーバーを利用できません。 コード : 800706BA ソース : SWbemLocator 3 について 以下の構文を組んでいますが、エラーは表示されないものの、シャットダウンが開始されません。 ----- On error resume Next Const LogOff = 0 'ログオフ Const REBOOT = 2 '再起動 Const SHUTDOWN = 8 'シャットダウン Dim objWMIService Dim colOperatingSystems Dim objOperatingSystem Set objWMIService = GetObject("winmgmts:{impersonationLevel= impersonate,(Shutdown)}\\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems objOperatingSystem.Win32Shutdown(SHUTDOWN) Next Set objWMIService = Nothing Set colOperatingSystems = Nothing Call ErrorCheck End Function ----- また、試しに objNetwork.MapNetworkDrive を使用してサーバーの IPC$ に接続しログインした後に上記処理を試行しましたが、 シャットダウンが進みませんでした。 何卒よろしくお願いいたします。

  • プリンタ一覧の取得

    お世話になります。 ネットワーク上の他クライアントのプリンタ一覧を取得する方法を探しています。 環境はWin2000です。 クライアントAから、クライアントBにログオンしているユーザー2のプリンタ一覧を取得する方法はあるのでしょうか。 strComputer ="クライアントB" Set objWMIService = GetObject( "winmgmts://" & strComputer & "/root/cimv2" ) Set PrtSet = objWMIService.ExecQuery("Select * From Win32_Printer") For Each Prt In PrtSet MsgBox Prt.Caption Next 上記、クライアントAにログオンしているユーザー1で実行したところクライアントBのユーザー1プロファイルのプリンタ一覧を取得してしまい、ユーザー2のプリンタ一覧を取得してくれません。 なにか情報、方法ありましたらご教授ください。 よろしくお願いします。

  • vbsでDNSサフィックスの変更をするには

    今、WMIのメソッドを使用して DNSサフィックスを変更するVBSを作成しているのですが なぜか「行10、文字3が無効なメソッドです」って エラーになってしまいます。 運用の環境なので変にランタイムなども入れられないため VBSを選択し、IP変更やコンピュータ名変更なんかは できたのですが、DNSサフィックスがどうしてもうまくいきません。 メソッドもwbemtest.exeにて調べたので無いことも無いと 思うのですが。。。 どなたかわかる方いらっしゃいましたら 教えていただけないでしょうか。お願いします。 **ここからがソースです**** strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNIC = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled=true") arrDNSSuffixes = Array("domain1.local", "domain2.local") For each objNIC in colNIC objNIC.SetDNSSuffixSearchOrder(arrDNSSuffixes) NEXT **ここまでがソースです****

  • WMIによるネットワーク接続の有効無効化方法

    WMIによるネットワーク接続の有効無効化方法がわからないため 下記VBScriptの「Array("192.168.9.999")」の部分のIPアドレスを 有効化のVBScriptには割り当てているアドレスを 無効化のVBScriptにはでたらめなアドレスを設定し 有効無効化らしきことを実現させています。 実際にはネットワーク接続は有効のままでネットワークアドレスが ちがうために接続できないだけです。 どなたか有効無効化(IPEnabledをTRUEorFALSEにするMethod)方法を 教えていただけないでしょうか? strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") strIPAddress = Array("192.168.9.999") strSubnetMask = Array("255.255.255.0") For Each objNetAdapter in colNetAdapters errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask) If errEnable = 0 Then WScript.Echo "The IP address has been changed." Else WScript.Echo "The IP address could not be changed." End If Next

  • VBSについて教えてください。

    VBSについて教えてください。 イベントビューワのプロパティの変更(最大ログサイズとログサイズが最大値に達した時の操作)を以下のスクリプトにて変更したいと思っています。(スクリプトはhttp://www.microsoft.com/japan/technet/scriptcenter/scripts/logs/eventlog/lgevvb16.mspxで公開されているのを利用しています。) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate,(Security)}!\\" & _ strComputer & "\root\cimv2") Set colLogFiles = objWMIService.ExecQuery _ ("Select * from Win32_NTEventLogFile") For each objLogfile in colLogFiles strLogFileName = objLogfile.Name Set wmiSWbemObject = GetObject _ ("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2:" _ & "Win32_NTEventlogFile.Name='" & strLogFileName & "'") wmiSWbemObject.MaxFileSize = 1024000 wmiSWbemObject.OverwriteOutdated = 0 wmiSWbemObject.Put_ Next WindowsXPSP2では動作したのですが、Windows2000SP4では以下のエラーが発生します。 Windows Script Host スクリプト:スクリプトの場所 行:14 文字:5 エラー:WBEM_FLAG_USE_AMENDED_QUALIFIERSが指定されていない場合は修正オブジェクトを置くことはできません コード:80041066 ソース:SWbemObject VBSについては全く理解できておりません。 Windows2000で動作させるためにんはどこを修正すればいいでしょうか?

  • スクリプト:特権を保有していません

    Const wshYes = 6 Const wshNo = 7 Const wshYesNoDialog = 4 Const wshQuestionMark = 32 Set objShell = CreateObject("Wscript.Shell") intReturn = objShell.Popup("再起動処理キャンセルしますか?(60秒以内)", _ 60, "再起動処理開始", wshYesNoDialog + wshQuestionMark) If intReturn = wshYes Then Wscript.Echo "再起動処理をキャンセルしました" ElseIf intReturn = wshNo Then Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems ObjOperatingSystem.Win32Shutdown(6) Next Wscript.Echo "再起動処理を実行しています。" Else Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems ObjOperatingSystem.Win32Shutdown(6) Next Wscript.Echo "タイムアウトです。再起動処理を実行しています。" End If とスクリプトをいただきましたが、特権を保有していません。コード 80041062 が表示されてしまいます。あいにく、ど素人のため特権を付与してあげる方法がわかりません。もしお分かりになるか いらっしゃいましたら、ご教示をお願いいたします。

  • サーバのメモリ使用量とかを確認したい

    strComputer = "atl-dc-01" Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration") For Each wbemObject In wbemObjectSet WScript.Echo "物理メモリの合計 (kb): " & wbemObject.TotalPhysicalMemory Next こういったプログラムを見つけたのですが・・・Getobjectで書き込みが出来ないエラーが出ます。 調べた結果おそらく権限がないことがいけないかと思いますが・・・どうやって結果を得られるのかわかりません。 あとコミットチャージとかも取得で切ればいいのですが・・・よろしくお願いします。

  • 0×80041003 のエラー

    0×80041003のエラーがイベントビュアーに出ていて、検索しましたら http://www.sql-master.net/articles/SQL749.html がヒットしました。 書いてあるように、 strComputer = “.” Set objWMIService = GetObject(“winmgmts:” _ & “{impersonationLevel=impersonate}!\\” _ & strComputer & “\root\subscription”) Set obj1 = objWMIService.Get(“__EventFilter.Name=’BVTFilter’”) set obj2set = obj1.Associators_(“__FilterToConsumerBinding”) set obj3set = obj1.References_(“__FilterToConsumerBinding”) For each obj2 in obj2set WScript.echo “Deleting the object” WScript.echo obj2.GetObjectText_ obj2.Delete_ next For each obj3 in obj3set WScript.echo “Deleting the object” WScript.echo obj3.GetObjectText_ obj3.Delete_ next WScript.echo “Deleting the object” WScript.echo obj1.GetObjectText_ obj1.Delete_ を、新しいテキストドキュメントにページからそのままコピーして貼り付け、ファイルメニューで名前を付けて保存で、[新しい.vbs]と名前を変換して保存、保存した物をクリックすると エラー:文字が正しくありません コード:800A0408 ソース:Microsoft VBScriptコンパイルエラー と出ます、どうすれば良いのでしょうか。