我需要对 300 多台既不在同一网络上,也不归同一公司所有的计算机进行软件审计。
是否有一个命令或小程序(无需安装即可运行),我可以通过电子邮件发送给最终用户运行以输出 MS Windows 和 MS Office 版本?
我需要对 300 多台既不在同一网络上,也不归同一公司所有的计算机进行软件审计。
是否有一个命令或小程序(无需安装即可运行),我可以通过电子邮件发送给最终用户运行以输出 MS Windows 和 MS Office 版本?
获取当前 Windows 版本和 Microsoft Office 版本的一种可能方法是使用命令行查询系统注册表项。
要使用 System registry 获取 windows 版本,请使用以下命令:
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v "ProductName"
这将给出一个输出,可以对其进行解析以获取当前的 Windows 版本/名称。
要获取当前的 office 版本,请使用:
reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"
此命令的输出以数字格式(例如 14、15 等)给出 office 版本。
解析输出以获取版本号并与现有 Microsoft Office 版本列表匹配以获取已安装版本的名称:
Office 97 - 7.0
Office 98 - 8.0
Office 2000 - 9.0
Office XP - 10.0
Office 2003 - 11.0
Office 2007 - 12.0
Office 2010 - 14.0
Office 2013 - 15.0
Office 2016 - 16.0
希望这可以帮助!!
@echo off
setlocal enableDelayedExpansion
for /f "tokens=2 delims==" %%O in ('ftype ^|findstr /r /I "\\OFFICE[0-9]*" 2^>nul') do (
set "verp=%%~O"
goto :end_for
)
:end_for
for %%P in (%verp%) do (
set "off_path=%%~dpP"
for %%V in ("!off_path:~0,-1!") do (
set "office_version=%%~nV"
goto :end_for2
)
)
:end_for2
echo %office_version%
endlocal
不需要管理员权限,适用于 Windows XP 及更高版本
要在 Windows 10 下获取 office 版本,这是相当优雅的:
for /F "tokens=3 delims=." %%O in ('reg query HKEY_CLASSES_ROOT\Word.Application\CurVer') do set _officeVer=%%O
不需要管理员权限,也适用于 xp 及更高版本
我用它来抓取版本 2003、2007、2010 和 2013。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=3 delims=." %%a in ('reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"') do set reg=%%a
set /a i=0
for %%b in (11 12 14 15) do (
if %%b == %reg% goto setver
set /a i+=1
)
:setver
set /a n=0
for %%c in (2003 2007 2010 2013) do (
if !n! == !i! set ver=%%c && goto endloop
set /a n+=1
)
:endloop
echo Microsoft Version: %ver%
echo.
endlocal
:end
pause
我不是来检测 Windows 版本的,我觉得其他答案已经很好地涵盖了这一点,应该是一个单独的问题。但是,Office 是 IMO 的绝招。这是我检测 MS Office 版本和 Arch 的方法。
注意:这几乎没有在两个 x32 位不同的安装上进行测试,但“应该”全部捕获。
@ECHO OFF
CLS
setlocal enableextensions enabledelayedexpansion
::FreeSoftwareServers.com
set key="*0FF1CE*"
set threesixtyfivekey="O365*"
set keypath=
set arrsize=1
set arg[0]="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
set arg[1]="HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
for /l %%n in (0,1,%arrsize%) do (
FOR /F "tokens=* USEBACKQ" %%N IN (`REG QUERY !arg[%%n]! /f %threesixtyfivekey% /k 2^>nul`) DO (
ECHO "%%N" | FIND /I "HKEY">Nul && (
If %%n == 0 (
set arch=x32
) ELSE (
set arch=x64
)
set keypath=%%N
goto keypathFound
)
)
FOR /F "tokens=* USEBACKQ" %%N IN (`REG QUERY !arg[%%n]! /f %key% /k 2^>nul`) DO (
ECHO "%%N" | FIND /I "HKEY">Nul && (
If %%n == 0 (
set arch=x32
) ELSE (
set arch=x64
)
set keypath=%%N
goto keypathFound
)
)
)
GoTo end
:keypathFound
FOR /F "skip=2 tokens=1,2* USEBACKQ" %%N IN (`reg query "%keypath%" /t REG_SZ /v "DisplayName"`) DO (
IF /I "%%N" == "DisplayName" (
SET OVer=%%P%~1
GoTo Found
)
)
:Found
for /f "tokens=1-20 delims=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$&*()-= " %%a in ("%OVer%") do (
IF %%a == 64 (
set ONum=%%b
GoTo varset
)
IF %%a == 32 (
set ONum=%%b
GoTo varset
)
set ONum=%%a
)
:varset
Echo Office Number: %ONum%
ECHO Office Display Name: %OVer%
ECHO Software Architecture: %arch%
PAUSE
:End
还有 1 个使用 npocmaka 的代码,但添加了一个地图以使其更加用户友好:
@echo off
setlocal
call :GetOfficeVer
endlocal
exit /b
:GetOfficeVer
::@echo off
setlocal enableDelayedExpansion
for /f "tokens=2 delims==" %%O in (
'ftype ^|findstr /r /I "\\OFFICE[0-9]*" 2^>nul') do (
set "verp=%%~O"
goto :end_for
)
:end_for
for %%P in (%verp%) do (
set "off_path=%%~dpP"
for %%V in ("!off_path:~-3,2!") do (
set "off_ver=%%~nV"
call :Map !off_ver! && exit /b
)
)
:Map
set "v=%1"
set "map=11-2003;12-2007;14-2010;15-2013"
call set v=%%map:*%v%-=%%
set v=%v:;=&rem.%
echo Microsoft Office Version: %v%
endlocal
exit /b