システムにインストールされているすべてのアプリケーションをテキストファイルまたはcsvに一覧表示するVBScriptを記述しようとしています。すべてのソフトウェア(名前、バージョン、日付、サイズを含む)をリストする既存のコードを見つけることができました。私がそれを見つけたのでそれを現在実行すると、エコーがホストエコーポップアップとして表示されます。各エコーをファイルに出力するには、VBSに何を追加する必要がありますか?これは簡単だと思いますが、解決策を見つけることができないようです。
以下は私が見つけたスクリプトです:
Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
' List All Installed Software
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
strComputer = "."
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
strEntry1b = "QuietDisplayName"
strEntry2 = "InstallDate"
strEntry3 = "VersionMajor"
strEntry4 = "VersionMinor"
strEntry5 = "EstimatedSize"
Set objReg = GetObject("winmgmts://" & strComputer & _
"/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
WScript.Echo "Installed Applications" & VbCrLf
For Each strSubkey In arrSubkeys
intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
strEntry1a, strValue1)
If intRet1 <> 0 Then
objReg.GetStringValue HKLM, strKey & strSubkey, _
strEntry1b, strValue1
End If
If strValue1 <> "" Then
WScript.Echo VbCrLf & "Display Name: " & strValue1
End If
objReg.GetStringValue HKLM, strKey & strSubkey, _
strEntry2, strValue2
If strValue2 <> "" Then
WScript.Echo "Install Date: " & strValue2
End If
objReg.GetDWORDValue HKLM, strKey & strSubkey, _
strEntry3, intValue3
objReg.GetDWORDValue HKLM, strKey & strSubkey, _
strEntry4, intValue4
If intValue3 <> "" Then
WScript.Echo "Version: " & intValue3 & "." & intValue4
End If
objReg.GetDWORDValue HKLM, strKey & strSubkey, _
strEntry5, intValue5
If intValue5 <> "" Then
WScript.Echo "Estimated Size: " & Round(intValue5/1024, 3) & " megabytes"
End If
Next
これに対処する1つの方法は、cscript.exe
を介してスクリプトを実行し、出力をファイルにリダイレクトすることです。
cscript.exe //NoLogo "C:\path\to\your.vbs" >"C:\output.txt"
実行方法に関係なく、スクリプトを変更して出力をファイルに書き込む場合は、出力ファイルを開く/閉じるためのコードを追加する必要があります。
Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set f = fso.OpenTextFile("C:\output.txt", 2)
...
f.Close
'End of Script
WScript.Echo
が出現するたびにf.WriteLine
に置き換えます。
Skarykid-ほぼ6か月前にあなたが受け取ってこれに回答したことは知っていますが、私は同様のスクリプトを探していました。私はあなたが提供したスクリプトを修正し、Ansgarの提案と私の独自の小さなコードを追加して、次のバージョンを思いつきました。
このスクリプトは、ローカルマシンにインストールされているすべての32ビットおよび64ビットアプリケーションの表形式のテキストファイルを生成し、結果のファイルをメモ帳で開きます。
これがあなたや他の誰かがこのスレッドに出会うのに役立つことを願っています。
'listapps.vbs
'Generates a text file listing all 32bit & 64bit apps installed on the local machine
'===================================================================================
'Declare constants, variables and arrays
'---------------------------------------
'Registry keys and values
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Dim arrKeys(1)
arrKeys(0) = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
arrKeys(1) = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
strComputer = "."
strEntry1a = "DisplayName"
strEntry1b = "QuietDisplayName"
strEntry2 = "Publisher"
strEntry3 = "InstallDate"
strEntry4 = "EstimatedSize"
strEntry5 = "DisplayVersion"
'Create the output file
Dim objShell, objShellEnv, strComputerName, objFso
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShellEnv = objShell.Environment("Process")
strComputerName = objShellEnv("ComputerName")
Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Set outputFile = objFso.CreateTextFile(strComputerName & ".txt", True)
'===================================================================================
Set objReg = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv")
'Print header (comment out the line below if you do not want headers in your output file)
'outputFile.WriteLine"Name" & vbTab & "Publisher" & vbTab & "Installed On" & vbTab & "Size" & vbTab & "Version" & VbCrLf
For i = 0 to 1
'Check to ensure registry key exists
intCheckKey = objReg.EnumKey(HKLM, arrKeys(i), arrSubkeys)
If intCheckKey = 0 Then
For Each strSubkey In arrSubkeys
intReturn = objReg.GetStringValue(HKLM, arrKeys(i) & strSubkey, strEntry1a, strValue1)
If intReturn <> 0 Then
objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry1b, strValue1
End If
objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry2, strValue2
objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry3, strValue3
objReg.GetDWORDValue HKLM, arrKeys(i) & strSubkey, strEntry4, strValue4
objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry5, strValue5
If strValue1 <> "" Then
outputFile.WriteLine strValue1 & vbTab & strValue2 & vbTab & strValue3 & vbTab & strValue4 & vbTab & strValue5
End If
Next
End If
Next
'Close the output file
outputFile.Close
'Launch output file for review
objShell.run "notepad.exe " & strComputerName & ".txt"
'Clean up and exit
Set objShell = Nothing
Set objFso = Nothing
アンスガーの最高評価の回答に加えて、
Set f = fso.OpenTextFile("C:\output.txt", 2)
に
Set f = fso.CreateTextFile("C:\output.txt", 2)
vBSスクリプトは、既存の空のファイルがすでに宛先にあることを要求するのではなく、出力ファイルを作成できます。