如何修复 thix 批处理脚本

Posted

技术标签:

【中文标题】如何修复 thix 批处理脚本【英文标题】:How can i fix thix batch script 【发布时间】:2022-01-18 19:40:07 【问题描述】:

您好,我的脚本有问题,我想从该脚本中获得以下内容。首先,我想创建一个文件夹,其中包含特定于我的计算机的月份,并在该文件夹中记录事件日志,但即使脚本以管理员权限运行也没有任何安全性,但仅保存应用程序事件和系统事件。下面是我的脚本

@echo off
rem Script starts here
rem Timestamp Generator
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set "dt=%%a"
:: Format the WMIC command output in YY_MM_DD_hr_mn format
set "YY=%dt:~0,4%"
set "MM=%dt:~4,2%"
set "DD=%dt:~6,2%"
set "hr=%dt:~8,2%"
set "mn=%dt:~10,2%"
:: Format the MM (month-number) to display the month-name
if %MM%==01 set MM=Ianuarie
if %MM%==02 set MM=Februarie
if %MM%==03 set MM=Martie
if %MM%==04 set MM=Aprilie
if %MM%==05 set MM=Mai
if %MM%==06 set MM=Iunie
if %MM%==07 set MM=Iulie
if %MM%==08 set MM=August
if %MM%==09 set MM=Septembrie
if %MM%==10 set MM=Octombrie
if %MM%==11 set MM=Noiembrie
if %MM%==12 set MM=Decembrie
set "today_date_time=%MM%_%YY%"
echo %today_date_time%
mkdir .\%today_date_time%
rem Set the timestamp format
wevtutil epl System %MM%_%YY%\system.evtx
wevtutil epl Application %MM%_%YY%\application.evtx
wevtutil epl Security %MM%_%YY%\security.evtx
wmic nteventlog where filename='system' cleareventlog
wmic nteventlog where filename='application' cleareventlog
wmic nteventlog where filename='security' cleareventlog
rem End of Script

【问题讨论】:

您的代码对我来说可以正常工作。尝试打开命令提示符并从那里运行脚本,而不是双击它来查看是否收到错误消息。 我不明白你为什么这样做,为什么不选择其中一个呢?例如,使用WMIC.exe,您可以将nteventlogBackUpEventLog 方法一起使用,就像您打算使用ClearEventLog 方法一样。或者使用wevtutil.exe,您可以一次性完成,%SystemRoot%\System32\wevtutil.exe cl Application /bu:"%today_date_time%\application.evtx",它将在清除事件之前备份事件。至于Security,你确定你有吗? %SystemRoot%\System32\wbem\WMIC.exe nteventlog Get FileName 应该告诉你那些存在的。 如您所说,我从 cmd 使用管理员权限运行了该程序,但它没有为我生成名为 Security 的事件。忘记一张图片ibb.co/JH5rQYK,我想问你的是如何在月份文件夹中创建一个子文件夹,并且这个新生成的文件夹应该有计算机的名称。 Compo 你可以在代码中给我看,我不明白你的意思我是批处理脚本的新手。 当然是@Hadad,请给我几分钟的时间在答案区域输入内容。 【参考方案1】:

根据您的评论请求,这是一个没有所有 WMIC.exe 内容的重写示例:

@Rem Start of script.
@Echo Off
SetLocal EnableExtensions
Rem End script if end user is not running with the required permissions.
%SystemRoot%\System32\reg.exe Query "HKU\S-1-5-19" 1>NUL 2>&1 || GoTo :EOF
Rem Add the current directory to the stack and make this scripts location the current directory.
PushD "%~dp0."
Rem Generate a datestamp variable with a string formatted as yy_MMMM.
Set "DateStamp="
For /F %%G In ('%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile "Get-Date -F 'yy_MMMM'" 2^>NUL') Do Set "DateStamp=%%G"
Rem End script if datestamp variable was not defined.
If Not Defined DateStamp GoTo :EOF
Rem Backup and clear event logs.
If Not Exist "%DateStamp%\" MD "%DateStamp%"
For %%G In (Application Security System) Do %SystemRoot%\System32\wevtutil.exe cl %%G /bu:"%DateStamp%\%%G.evtx"
Rem Make the previous directory in the stack the current directory.
PopD
Rem End of Script.

如果最终用户没有以管理员身份运行,则该脚本被设计为关闭。备份文件也将保存到与正在运行的批处理文件相同的位置。

【讨论】:

这对我不起作用ibb.co/hKyVH1z这里有一张带有cmd的照片 我在上面的代码@Hadad 中修正了我的错字。还请尝试从其他地方运行批处理文件,而不是从网络位置\\VBOXSVR\share-folder。我会假设它无法按原样写入该位置。如果可行,我会考虑修改上述内容。 还是不行,我也在电脑上跑了代码,还是不行 如果需要,请从您的原始位置尝试上面的修订版本。如果它没有达到预期的效果,而不是仅仅说“它不起作用”,尝试为其他读者或我自己提供足够的信息来找出可能的原因。我们期望所有消息、调试信息、是否创建了任何文件等。 我很抱歉这个表达式,它不会为我生成 3 个日志中的任何一个,我以管理员权限运行脚本,这是一张图片ibb.co/tmFDn1h

以上是关于如何修复 thix 批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章

BAT 批处理脚本教程

从非修复标头开始的 csv 读取 pandas 数据帧

主从故障快速修复脚本

如何从批处理脚本中运行批处理脚本?

lldb 脚本 - 断点写出(breakpoint write) 修复

修复达到的最大setlocal递归级别