- 締切済み
プログラムの追加と削除の一覧を出力する(MS更新パッチは除く)Vbsを
プログラムの追加と削除の一覧を出力する(MS更新パッチは除く)Vbsを作成したのですがこの結果と比較して同じ名前があれば出力するVbsを追記で作成したいのですが御教授下さい。 例:InternetExploerはインストールされています。 ※ちゃんとインストールされているかの判定で使うのが目的です。 Option Explicit Const HKEY_LOCAL_MACHINE = &H80000002 Dim objRegProv, ccSubKeys Dim strComputer, sytKey, strSubKey, dwVal Dim strDisplayName, strParentKeyName, dwSystemComponent strComputer = "." Set objRegProv = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") sytKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" Call objRegProv.EnumKey(HKEY_LOCAL_MACHINE, sytKey, ccSubKeys) For each strSubKey in ccSubKeys dwVal = objRegProv.GetStringValue(HKEY_LOCAL_MACHINE, sytKey & "\" & strSubKey, "ParentKeyName", strParentKeyName) If dwVal <> 0 Then ' ParentKeyNameが無いものが対象(更新インストールではないもの) dwVal = objRegProv.GetDWORDValue(HKEY_LOCAL_MACHINE, sytKey & "\" & strSubKey, "SystemComponent", dwSystemComponent) If dwVal <> 0 Or dwSystemComponent = 0 Then ' システムフラグが無いまたはゼロのものが対象 dwVal = objRegProv.GetStringValue(HKEY_LOCAL_MACHINE, sytKey & "\" & strSubKey, "DisplayName", strDisplayName) If dwVal = 0 And strDisplayName <> "" Then ' 表示名があるものが対象 WScript.Echo strDisplayName End If End If End If Next
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- VBSでXMLを読込、検索結果をテキスト出力
VBSのソースについてご教授下さい。 【作りたい機能】 XMLファイルを読み込み、任意のエレメントを検索するスクリプトを VBSで作成しようとしています。 【状況】 ダイアログで表示させる方法はわかりました。 参照 http://www.atmarkit.co.jp/fxml/rensai/msxml01/msxml03.html 01 : Dim objDOM, rtResult 02 : 03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument") 04 : rtResult = objDOM.load("Sample.xml") 05 : If rtResult = True Then 06 : procDispDatas objDOM.childNodes 07 : End If 08 : Set objDOM = Nothing 09 : 10 : Sub procDispDatas(objNode) 11 : Dim obj 12 : For Each obj In objNode 13 : If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then 14 : MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue 15 : End If 16 : If obj.hasChildNodes Then 17 : procDispDatas obj.childNodes 18 : End If 19 : Next 20 : End Sub この結果をテキストファイルに出力させる方法に 困っております。 どこにどのように記載すればいいか 教えていただきたく存じます。 よろしくお願いいたします
- 締切済み
- Visual Basic
- win7とwin10でマクロ動作が異なる
ノートパソコンで動作するマクロがディスクトップパソコンで動作しません。 excelマクロはoffice2010(32bit版)で、どちらも同じ。 ディスクトップパソコン:win10(64ビットオペレーティングシステム) ノートパソコン:wwin7(32ビットオペレーティングシステム) です。 動作させたマクロは、webに掲載されていたものを参考にA列へ名称記載を追加したものです。 Sub get_application() 'インストールされているアプリケーション一覧を取得するVBAマクロ Dim reg As Object Dim keys As Variant Dim key As Variant Dim ret As Long Dim display_name As String Const HKEY_LOCAL_MACHINE = &H80000002 Const SubKeyName = "Software\Microsoft\Windows\CurrentVersion\Uninstall\" Set reg = CreateObject("WbemScripting.SWbemLocator") _ .ConnectServer(, "root\default").Get("StdRegProv") reg.EnumKey HKEY_LOCAL_MACHINE, SubKeyName, keys On Error Resume Next i = 1 For Each key In keys display_name = "" ret = reg.GetStringValue(HKEY_LOCAL_MACHINE, SubKeyName & key, "DisplayName", display_name) If (ret = 0) And (Len(Trim(display_name)) > 0) Then ret = reg.GetStringValue(HKEY_LOCAL_MACHINE, SubKeyName & key, "QuietDisplayName", display_name) If Len(Trim(display_name)) > 0 Then Debug.Print display_name Cells(i, 1) = display_name i = i + 1 End If Next On Error GoTo 0 End Sub win7だと上記マクロで動作するのですが、win10だとエラーがでるわけでもなく、だんまり状態となります。 If (ret = 0) And (Len(Trim(display_name)) > 0) Then ret = reg.GetStringValue(HKEY_LOCAL_MACHINE, SubKeyName & key, "QuietDisplayName", display_name) の部分を削除すると、win7,win10共に動作します。 win7では、上記削除した部分の有無でマクロの実行結果は同じです。 なので、とりあえず、マクロ動作に関しては、不要で解決できているのですが、 何故win7で動作するマクロが、win10では、だんまりになるのか、 また、どういった処理なのかを、解説お願いできますでしょうか?
- ベストアンサー
- Excel(エクセル)
- VBS でプログラムを先頭から再試行
VBSの実行中に、プログラムを先頭から再試行させるにはどうしたらいいですか? 2重起動ではなく、あくまでプログラム自身のリスタートです。 処理 A num = msgbox ("プログラムの再試行",5) if num = 4 then '再試行が押されたなら リスタート else 'キャンセルなら WScript.Quit end if 処理 B 上記の「リスタート」の部分の記述をお願いします。
- 締切済み
- その他(プログラミング・開発)
- WMIスクリプトを使用してMACアドレスをASPで取得
タイトルの通りですが、 WMIスクリプトを使用して、 ASPでMACアドレスの取得を行なっているのですが、 なかなか上手くいきません。 <%@ LANGUAGE="VBSCRIPT"%> <HTML> <HEAD> </HEAD> <BODY> <% Dim QfeSet Dim QfeSets Dim Qfe Dim Locator Dim Service Dim Ret on error resume next Set Locator = CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer If Err = 0 then Set QfeSet = Service.Get("Win32_NetworkAdapterConfiguration") QfeSet.Security_.impersonationLevel = impersonate Set QfeSets = QfeSet.Instances_ End If For Each Qfe In QfeSet If Qfe.IPEnabled = True Then Ret = Qfe.MACAddress & vbCrLf Response.write("MACADDRESS:" & Ret & "<BR>") End If Next %> </BODY> </HTML> CreateObjectやService.Getのところが 原因ではないかと思うのですが・・・。 どなたか教えて戴けますでしょうか? 宜しくお願い致します。
- 締切済み
- Microsoft ASP
- (VBA)RegDeleteKeyがエラー
RegDeleteKeyについて教えてください ○削除するレジストリHKEY_LOCAL_MACHINE\SOFTWARE\XTSEGRSCESK\AAA ○ソース Public Const HKEY_LOCAL_MACHINE = &H80000002 Dim lRootKey As Long Dim sSubKey As String Dim lRet As Long lRootKey = HKEY_LOCAL_MACHINE sSubKey = "SOFTWARE\XTSEGRSCESK\AAA" lRet = RegDeleteKey(lRootKey, sSubKey) ○結果 RegDeleteKeyの戻り値が2 どこが悪いか教えてください お願いします
- 締切済み
- Visual Basic
- VBSでレジストリキー名に円マークをつける
「SQL\INSTANCE」という名前のキーをレジストリに作成したいのですが、円マークを入れると階層化されてしまうので、困っています。 カンタンな質問かもしれませんがどなたか教えてください。 以下、VBSで作成 Option Explicit On Error Resume Next Dim objWshShell ' WshShell オブジェクト Set objWshShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then objWshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\SQL\INSTANCE", "SQL", "REG_SZ" WScript.Echo "ODBC設定変更:完了" Else WScript.Echo "エラー: " & Err.Description End If Set objWshShell = Nothing
- ベストアンサー
- その他(プログラミング・開発)
- VBSでのファイル読込、出力操作について
いつもありがとうございます。 掲題の件について、ご教授頂けますでしょうか。 下記のように『start.vbs』を実行すると『a.txt』の行に記載されている実行ファイル名を読み込み 『test.vbs』にファイル名分のコマンドを書き込みしたいです。 例) ----------------------------- start.vbs (作成途中) ----------------------------- Set objWShell = CreateObject("wscript.shell") Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile("c:\a.txt", 1, False) ' 出力先ファイル Set objVBSFile = objFSO.CreateTextFile(c:\test.vbs, True) If Err.Number > 0 Then WScript.Echo "Open Error" Else Do Until objFile.AtEndOfStream objVBSFile.WriteLine(objFile.ReadLine) Loop End If ----------------------------- a.txt ----------------------------- adobe.exe photoshop.exe ****.exe ・ ・ ・ ------------------------------ start.vbs ------------------------------ objWShell.Run "cmd.exe c:\adobe.exe ", 0, True objWShell.Run "cmd.exe c:\photoshop.exe ", 0, True objWShell.Run "cmd.exe c:\****.exe ", 0, True ・ ・ ・ vbsをサイトを参考にして作ってはいるものの、start.vbsを実行すると a.txtのファイル名をvbsに書き込むのが限界です。 少しずつ勉強していくのですが、本件少し早めに作りたいという背景があり ご教授頂けませんでしょうか。 また、わかりにくい説明となっておりますが どうぞ宜しくお願い致します。
- ベストアンサー
- その他(ITシステム運用・管理)
- 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で動作させるためにんはどこを修正すればいいでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- VBSからリモートでbat実行(WMI)
VBS初心者です。 別端末上のbatファイルを別ユーザでリモート実行したいのですが、 以下のソースでエラーが起きてしまいます。(result が2で返ってきてしまう) どなたか原因がお解りになりましたらご教授宜しくお願い致します。 ----------------------------------------------------- RemoteExecute "リモート先","ドメイン\User","pass","C:\test.bat" Function RemoteExecute(strServer, strUser, strPassword, CmdLine) Const Impersonate = 3 RemoteExecute = -1 Set Locator = CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer(strServer, "root\cimv2", strUser, strPassword) Service.Security_.ImpersonationLevel = Impersonate Set Process = Service.Get("Win32_Process") result = Process.Create(CmdLine, , , ProcessId) If (result <> 0) Then WScript.Echo "Creating Remote Process Failed: " & result Wscript.Quit End If RemoteExecute = ProcessId End Function -----------------------------------------------------
- 締切済み
- Visual Basic
- vbsで最後の行を削除する
csvファイル(test.csv)からフラグが1のものを抽出するのですが 最終行に改行がはってしまうので、最終行を削除してcsvファイルを保存したいのですが、 うまくいきません。ご教授ください。 Dim objADO Dim i Dim wsql Dim rs Dim wHeader Dim wData Dim objFSO Dim objFile Set objADO = CreateObject('ADODb.connection') objADO.Open "Driver={Microsoft Text Driver (*.txt;*csv)};"&_ "DBQ=C:\test;"&_ "ReadOnly=1" '抽出条件 wsql="select * from test.csv where フラグ='1'" Set rs =objADO.Execute(Wsql) 'ヘッダ部 wHeader='ID,商品名,商品番号,フラグ" 'データ部 wData="" Do While rs.EOF=False For i = 0 to rs.fields.count - 1 if i = (rs.fields.count -1) then wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & chr(13) else wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & "," end if next rs.MoveNext loop '最終改行削除? rs = Left(wData,Len(wData) - Len(chr(13))) 'ファイル出力 set objFSO = createObject("Scripting.FileSystemObject") set objFile = objFSO.OpentextFile("c:\test\test.csv",2, true) if err.Number = 0 then objFile.WriteLine(wHeader) objFile.WriteLine(wData) objFile.close end if set objFile = Nothing set objFSO = Nothing set objADO = Nothing ****************************************** ID,商品名,商品番号,フラグ 100,パソコン,100-12,1 200,ペン,200-11,1 ***ここの改行を削除する***** 〔EOF〕
- ベストアンサー
- その他(プログラミング・開発)
お礼
早急な回答して頂きありがとうございます。 御教授頂いたもので判定できました。 判定したいプログラムが複数ある場合は、下記の判定を複数並べれば良いだけなのでしょうか? If dwVal = 0 And strDisplayName <> "" Then ' 表示名があるものが対象 If InStr(strDisplayName, "○○○○○○○○○○○○○") > 0 Then flag = 1 WScript.Echo strDisplayName & " はインストールされています。" Exit For End If End If Next If flag = 0 Then WScript.Echo "○○○○○○○○○○○○○はインストールされていません。"