Batch file 如何循环使用Windows服务并将其与文本文件进行批量比较
我做了一个批处理代码,这是一个安全检查,看看是否有任何系统服务已被修改 这将通过以前注册的文本文件工作,该文件包含每个Windows服务的名称Batch file 如何循环使用Windows服务并将其与文本文件进行批量比较,batch-file,Batch File,我做了一个批处理代码,这是一个安全检查,看看是否有任何系统服务已被修改 这将通过以前注册的文本文件工作,该文件包含每个Windows服务的名称 AJRouter ALG AppIDSvc Appinfo AppReadiness AppXSvc AudioEndpointBuilder Audiosrv autotimesvc AxInstSV BDESVC BFE BITS ... 我设法完成了代码在文本文件的每一行上循环的部分,并检查是否缺少任何Windows服务 @echo off fo
AJRouter
ALG
AppIDSvc
Appinfo
AppReadiness
AppXSvc
AudioEndpointBuilder
Audiosrv
autotimesvc
AxInstSV
BDESVC
BFE
BITS
...
我设法完成了代码在文本文件的每一行上循环的部分,并检查是否缺少任何Windows服务
@echo off
for /F "tokens=*" %%A in (WindowsServices.txt) do (
SC QUERY %%A > NUL
IF ERRORLEVEL 1060 (ECHO %%A IS MISSING)
)
PAUSE
我还希望我的代码检查文本文件中是否有未注册的新服务。经过几次尝试后,我找不到一种方法来实现我的想法。我该怎么做
@echo off
( for /f "tokens=1,*" %%A in (
'sc query type^= service type^= userservice state^= all ^| find "SERVICE_NAME:"'
) do @echo %%B
) > all.tmp
( for /f "tokens=*" %%A in (
'findstr /b /e /i /l /v /g:"WindowsServices.txt" "all.tmp"'
) do @echo + %%A
for /f "tokens=*" %%A in (
'findstr /b /e /i /l /v /g:"all.tmp" "WindowsServices.txt"'
) do @echo - %%A
for /f "tokens=*" %%A in (
'findstr /b /e /i /l /g:"all.tmp" "WindowsServices.txt"'
) do @echo %%A
) > report.txt
del all.tmp
sort /+3 report.txt /o report.txt
type report.txt
如果要进一步处理输出,请使用更易于阅读和使用脚本处理的输出格式
输出解释为:
- 如果Lead带有
,则需要添加到WindowsServices.txt,即新建+
- 如果带有
的Lead位于WindowsServices.txt中,但不在注册表中,即丢失-
- 如果有空格,则在WindowsServices.txt和注册表中,即良好
for
循环。为了完整性,我添加了它,以便考虑所有服务名称
findstr
使用:
匹配行首的模式/b
匹配行尾的模式/e
指定搜索不区分大小写/i
逐字使用搜索字符串/l
从指定文件获取搜索字符串李>/g
sort
按字母顺序获取所有服务名称
注意:早期的Windows操作系统可能没有sc.exe
的userservice
类型,例如Windows 7。该代码在Windows 10上运行,无需修改
如果要进一步处理输出,请使用更易于阅读和使用脚本处理的输出格式
输出解释为:
- 如果Lead带有
,则需要添加到WindowsServices.txt,即新建+
- 如果带有
的Lead位于WindowsServices.txt中,但不在注册表中,即丢失-
- 如果有空格,则在WindowsServices.txt和注册表中,即良好
for
循环。为了完整性,我添加了它,以便考虑所有服务名称
findstr
使用:
匹配行首的模式/b
匹配行尾的模式/e
指定搜索不区分大小写/i
逐字使用搜索字符串/l
从指定文件获取搜索字符串李>/g
sort
按字母顺序获取所有服务名称
注意:早期的Windows操作系统可能没有
sc.exe
的userservice
类型,例如Windows 7。代码可以在Windows 10上运行,无需修改。给你一个开始:for/f“tokens=1*%a in('sc query^ find“SERVICE_NAME'))do@echo%b给你一个开始:for/f“tokens=1*%a in('sc query^ find“SERVICE_NAME')do@echo%b
你的代码工作正常,但我不知道为什么,它提供了错误的信息的三个检查,它做。感谢您的图片,它有助于识别所需内容。在sc.exe
中添加了一些参数以匹配图像中的服务。在没有额外参数的情况下,sc.exe
仅输出运行的服务
,而没有输出任何用户服务
。非常感谢。它工作得很好。你做的每件事都比我做的更好,哈哈。你的代码运行得很好,但我不知道为什么,它在三个检查中给出了错误的信息。感谢您的图片,它有助于识别所需内容。在sc.exe
中添加了一些参数以匹配图像中的服务。在没有额外参数的情况下,sc.exe
仅输出运行的服务
,而没有输出任何用户服务
。非常感谢。它工作得很好。你做的每件事都比我做的更好,哈哈。