首先,不要直接输出到.xlsx文件。该文件格式由zip压缩容器中的XML数据集合组成。改为使用.csv。
接下来,如果您的域名允许远程注册表查询,您可以使用
reg query \\remotemachine\HKLM\etc.
在网络上查询注册表值。在cmd控制台中输入reg query /?
了解详细信息。
如果您的域名不允许远程注册表查询,作为替代psexec
,你可以尝试使用wmic
与它的远程开关,查询StdRegProv class。假设“的ProductVersion”值的字符串值举行,这将是这个样子:
wmic /node:computername /user:domain\admin /password:adminpass /namespace:\\root\default class stdregprov call GetStringValue hDefKey="&H80000002" sSubkeyName="SOFTWARE\\Symantec\\Symantec Endpoint Protection\\CurrentVersion" sValueName="PRODUCTVERSION" | findstr "sValue"
或用变量来使其更易于阅读:
@echo off & setlocal
set "user=domain\admin"
set "pass=adminPass"
set "creds=/user:%user% /password:%pass%"
set "GetStringValue=/namespace:\\root\default class stdregprov call GetStringValue"
set hive=hDefKey^^^="^&H80000002"
set key=sSubkeyName^^^="SOFTWARE\\Symantec\\Symantec Endpoint Protection\\CurrentVersion"
set valname=sValueName^^^="PRODUCTVERSION"
set "args=%creds% %GetStringValue% %hive% %key% %valname%"
rem // output to c:\versions.csv
> "c:\versions.csv" (
rem // loop through ips.txt
for /f "usebackq delims=" %%I in ("c:\ips.txt") do (
rem // capture output of wmic command
for /f "tokens=2*" %%x in ('wmic /node:%%I %args% ^| find "sValue"') do (
rem // normalize encoding of response and output to csv file
for /f "delims=" %%# in ("%%~y") do echo %%~I,%%~#
)
)
)
注:我的天堂”对这个脚本进行了广泛的测试,因为我目前不在域环境中。如果它没有按预期工作,你可能会自己找出错误并修复它。据我所知,我测试了脱字符转义的评估,并且能够在不使用/node
,/user
和/password
交换机的情况下查询本地计算机上的注册表。我有successfully used similar methods来查询域中的远程计算机,过去传统的远程注册表查询被阻止。
您能否向任何可能感觉到此类请求可能与安全漏洞利用有关系的人解释是否是错误的? – Compo
即使您将该文件扩展名为.xlsx,也无法通过将文本输出重定向到文件来创建Excel工作簿。另外,为什么你使用'psexec'而不是'reg query \\ 1.2.3.4 \ HKLM \ ...'? –
此外,使用20000个系统检查您可能希望以某种程度的并行性运行查询。 PowerShell [jobs](https://stackoverflow.com/a/18193195/1630171)是一种可能的方法。 –