我开发了一个程序(1),编号为info.bat
:
%ComputerName%.csv
文件。 .vbs
文件(2),这会将已安装程序的列表输出到与%ComputerName%-programs.txt
文件位于同一目录中的.csv
文件。 .vbs
完成后结束,并向用户显示准备好下一个命令的Cmd窗口。 接下来手动启动另一个程序StripSoftware.bat (3)
:
%ComputerName%-programs-to-check.txt
,%ComputerName%
,%ComputerName%-programs.txt
,%ComputerName%-programs-to-check.txt
目标:
%ComputerName%-programs-to-check.txt
中使用软件条目(每个软件名称一行),将它们连接在一起,然后将它们放入software_needed
文件的.csv
列。输出:
.csv
文件,或者最好是.xlsx
文件,第一行包含以下标题,第二行包含适用信息。.csv示例:
v34,ID,Asset,Sys_Type,Model,NHC Asset,New Sys Type,New Model,New Sys Asset,Domain,DIR,Site,Team,Location,Post,Name,Postcode,Local Printers,Network Printers,Eth_MACs,Wifi_MACs,Phone_MAC,Software Needed,OTHER_ASSET,OS_VER,Hostname,Software_Notes,Other_Notes,IGEL_REC
,,ABCDEFG,PC,A123,,,,,XXXX,Unknown,,,,,,, , ,||"XX-XX-XX-XX-XX-XX"|"Disabled",,,Not Used,ABCDEFG,Win XP Pro,ABCDEFG,,,
info.bat
的部分内容:
@echo OFF
setlocal enableextensions enabledelayedexpansion
SET file="%~dp0%computername%.csv"
If Exist %file% Del %file%
echo %Version_tool%,ID,Asset,Sys_Type,Model,NHC Asset,New Sys Type,New Model,New Sys Asset,Domain,DIR,Site,Team,Location,Post,Name,Postcode,Local Printers,Network Printers,Eth_MACs,Wifi_MACs,Phone_MAC,Software Needed,OTHER_ASSET,OS_VER,Hostname,Software_Notes,Other_Notes,IGEL_REC>>%file%
rem ========= Other code =========
echo ,%ID%,%serialnumber%,PC,%model%,,,,,%userdomain%,Unknown,,,,,,,%Local_Printers%,!network_printers!,!Eth_MACs!,!Wifi_MACs!,!Phone_MACs!,Not Used,%system%,%osname%,%Hostname%,,,%IGEL REC%>> %file%
SET file2="%~dp0%computername%-programs.txt"
If Exist %file2% Del %file2%
start /b cmd /k "cscript //nologo programs_02.vbs >> %file2%"
echo Batch Tool should finish in a few seconds ...
.vbs
档案的内容:
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 & 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
问题:
info.bat
会在创建.csv
文件之前创建.txt
文件,并且Software_Needed
的值(例如Adobe Flash | Hotfix for Windows
)可用在%ComputerName%-programs-to-check.txt
。因此很难在第二行使用.csv
的值更新Software_Needed
。建议的解决方案:(*)
.vbs
文件以在第一个%ComputerName%-programs.txt
文件中创建.bat
,然后在第二个.bat
文件中调用该StripSoftware.bat
文件在%ComputerName%-programs-to-check.txt
中创建%ComputerName%.csv
,然后使用该信息和其他信息创建{{1}} 问题:
1)感谢人们对拟议解决方案的想法,意见和看法
2)建议比解决方案更好的解决方案。
答案 0 :(得分:-1)
目前还不清楚你想要什么。这是我的标准职位。然后我会给你看一些东西。
开始 - 所有程序 - 附件 - 右键单击“命令提示符”,然后选择“以管理员身份运行”。键入(或通过右键单击“命令提示符”窗口并选择“粘贴”进行复制和粘贴)。表格格式的类型
wmic /output:"%userprofile%\desktop\WindowsInstaller.html" product get /format:htable
或表格格式
wmic /output:"%userprofile%\desktop\WindowsInstaller.html" product get /format:hform
它将在桌面上创建一个html文件。
注意强>
这不是完整列表。这只是与Windows Installer一起安装的产品。一切都没有特色。
但正如我在上一篇文章中所述,几乎所有内容都列在注册表中。
所以要在命令提示符下看到它
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s
或在文件中
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s>"%userprofile%\desktop\WindowsUninstall.txt"
以不同的格式在记事本中查看
单击开始 - 所有程序 - 附件 - 右键单击命令提示符,然后选择以管理员身份运行。键入Regedit并导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
右键单击“卸载”键,然后选择“导出”。如果您保存为reg文件(还有文本文件,它们的文本格式略有不同),您需要右键单击该文件并选择“编辑”进行查看。
查看Windows更新
wmic /output:"%userprofile%\desktop\WindowsUpdate.html" qfe get /format:htable
这是一个VBS脚本,可以安装程序,排序和过滤器。
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set rs = CreateObject("ADODB.Recordset")
Set wshshell = CreateObject("wscript.shell")
Set Outp = Wscript.Stdout
ComputerName=WshShell.ExpandEnvironmentStrings("%Computername%")
'Build database with Computername and Softwarename
With rs
.Fields.Append "ComputerName", 201, 5000
.Fields.Append "Txt", 201, 5000
.Open
'Get list installed programs
Set colItems = objWMIService.ExecQuery("Select * From Win32_Product")
'Add to database
For Each objItem in colItems
.AddNew
.Fields("ComputerName").value = ComputerName
.Fields("Txt").value = objItem.Name
.UpDate
Next
'Sort Database on software name
'Sort and filter it - Softwarename acending (Txt) and filter only those starting M
.Sort = "Txt ASC"
.Filter = "Txt like 'm*'"
'write out to a CSV
Do While not .EOF
Outp.writeline .Fields("ComputerName").Value & "," & .Fields("Txt").Value
.MoveNext
Loop
End With
使用
cscript //nologo <path to vbs file> > OUTPUTFILE
这是输出
SERENITY,Microsoft .NET Framework 1.1
SERENITY,Microsoft .NET Framework 3.5 SP1
SERENITY,Microsoft .NET Framework 4 Client Profile
SERENITY,Microsoft .NET Framework 4 Extended
SERENITY,Microsoft Application Compatibility Toolkit 5.0
SERENITY,Microsoft Application Error Reporting
SERENITY,Microsoft Calculator Plus
SERENITY,Microsoft Device Emulator version 3.0 - ENU
SERENITY,Microsoft Document Explorer 2005
SERENITY,Microsoft Filter Pack 1.0
SERENITY,Microsoft LifeCam
SERENITY,Microsoft Mathematics
SERENITY,Microsoft Network Monitor 3.0
SERENITY,Microsoft Office XP Professional
SERENITY,Microsoft OpenType Font File Properties Extension
SERENITY,Microsoft Search Enhancement Pack
所以有三个地方你可以丢弃物品。在WMI select
。
Set colItems = objWMIService.ExecQuery("Select * from Win32_Product where Name='Microsoft LifeCam'")
并且在使用类似语法的上述过滤器中也是如此。
同时写回来的时候你可以比较它而不是写下你不想要的。