请求提供两款VBScript脚本:远程64位PC安装及软硬件清单采集
没问题,我给你准备两个符合需求的VBScript脚本,都是针对64位远程机器优化的,你可以根据实际情况调整参数:
1. 远程安装EXE/MSI程序的VBScript脚本
这个脚本通过WMI远程执行安装命令,支持静默安装EXE或MSI包。使用前需要确认:
- 执行脚本的账户拥有目标远程计算机的管理员权限
- 目标计算机开启了WMI服务(默认是开启的)
- 安装包路径是目标计算机可访问的共享路径(比如
\\FileServer\Installers\setup.msi)
Option Explicit ' -------------------------- 配置参数 -------------------------- Dim strComputer, strInstaller, strArguments strComputer = "REMOTE-PC-NAME" ' 替换为目标远程计算机名/IP strInstaller = "\\FileServer\Installers\YourSetup.msi" ' 替换为安装包路径 strArguments = "/qn" ' MSI静默参数,EXE请替换为对应静默参数(如/s /silent等) ' ------------------------------------------------------------- Dim objWMIService, objProcess, intReturnCode ' 连接远程计算机的WMI服务 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") ' 创建进程执行安装命令 Set objProcess = objWMIService.Get("Win32_Process") intReturnCode = objProcess.Create("cmd /c """ & strInstaller & """ " & strArguments, Null, Null, intReturnCode) ' 输出执行结果 If intReturnCode = 0 Then WScript.Echo "安装命令已成功发送到远程计算机:" & strComputer Else WScript.Echo "发送安装命令失败,错误代码:" & intReturnCode End If Set objProcess = Nothing Set objWMIService = Nothing
注意: 不同EXE安装包的静默参数可能不同,需要参考对应软件的安装文档调整strArguments的值。
2. 硬件清单+已安装软件采集脚本
这个脚本会采集目标计算机的核心硬件信息(含计算机、显示器序列号)和已安装软件列表,最终输出到本地的InventoryReport.txt文件,适合库存统计使用。支持本地或远程执行。
Option Explicit ' -------------------------- 配置参数 -------------------------- Dim strComputer strComputer = "." ' 本地执行用".",远程执行替换为目标计算机名/IP ' ------------------------------------------------------------- Dim objFSO, objOutputFile, objWMIService, colItems, objItem Dim strReport ' 创建输出文件 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objOutputFile = objFSO.CreateTextFile("InventoryReport.txt", True) ' 连接WMI服务 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") ' -------------------------- 硬件信息采集 -------------------------- strReport = "=== 硬件清单 ===" & vbCrLf & vbCrLf ' 计算机序列号(BIOS序列号) strReport = strReport & "计算机序列号:" Set colItems = objWMIService.ExecQuery("SELECT SerialNumber FROM Win32_BIOS") For Each objItem In colItems If Not IsNull(objItem.SerialNumber) Then strReport = strReport & Trim(objItem.SerialNumber) & vbCrLf Else strReport = strReport & "未获取到" & vbCrLf End If Next ' 显示器序列号 strReport = strReport & vbCrLf & "显示器序列号:" Set colItems = objWMIService.ExecQuery("SELECT SerialNumber FROM Win32_DesktopMonitor") For Each objItem In colItems If Not IsNull(objItem.SerialNumber) And Trim(objItem.SerialNumber) <> "" Then strReport = strReport & Trim(objItem.SerialNumber) & vbCrLf Else strReport = strReport & "未获取到(部分显示器可能不支持)" & vbCrLf End If Next ' 核心硬件信息 strReport = strReport & vbCrLf & "CPU信息:" Set colItems = objWMIService.ExecQuery("SELECT Name FROM Win32_Processor") For Each objItem In colItems strReport = strReport & Trim(objItem.Name) & vbCrLf Next strReport = strReport & vbCrLf & "内存容量:" Set colItems = objWMIService.ExecQuery("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem") For Each objItem In colItems strReport = strReport & Round(objItem.TotalPhysicalMemory / 1024 / 1024 / 1024, 2) & " GB" & vbCrLf Next ' -------------------------- 已安装软件采集 -------------------------- strReport = strReport & vbCrLf & "=== 已安装软件列表 ===" & vbCrLf & vbCrLf ' 读取注册表Uninstall键(比Win32_Product更可靠,避免触发MSI修复) Dim objRegistry, strKeyPath, arrSubKeys, strSubKey, strDisplayName, strDisplayVersion Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") ' 64位系统的软件注册表路径 strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" objRegistry.EnumKey &H80000002, strKeyPath, arrSubKeys ' &H80000002是HKLM的64位视图 If IsArray(arrSubKeys) Then For Each strSubKey In arrSubKeys ' 获取软件名称 objRegistry.GetStringValue &H80000002, strKeyPath & "\" & strSubKey, "DisplayName", strDisplayName ' 获取软件版本 objRegistry.GetStringValue &H80000002, strKeyPath & "\" & strSubKey, "DisplayVersion", strDisplayVersion If Trim(strDisplayName) <> "" Then strReport = strReport & "- " & strDisplayName If Trim(strDisplayVersion) <> "" Then strReport = strReport & "(版本:" & strDisplayVersion & ")" End If strReport = strReport & vbCrLf End If Next End If ' 写入并关闭文件 objOutputFile.Write strReport objOutputFile.Close WScript.Echo "库存报告已生成:" & objFSO.GetAbsolutePathName("InventoryReport.txt") ' 释放对象 Set objOutputFile = Nothing Set objFSO = Nothing Set objWMIService = Nothing Set objRegistry = Nothing
注意: 远程执行时,同样需要执行账户拥有目标计算机的管理员权限和WMI访问权限;部分显示器可能无法返回序列号,属于硬件固件限制,无法解决。
内容的提问来源于stack exchange,提问作者DEBI PRASAD SINHA
相关产品推荐
相关产品推荐

