检查脚本之前是否至少运行过一次



有没有办法查看是否有任何PowerShell脚本之前至少执行过一次,而无需脚本本身创建任何日志? 即,对于已经执行的脚本,是否有某种本机记录保存机制(例如生成事件并因此创建事件日志(,这意味着实际执行的脚本的日志是在运行时但在外部创建的?

例如:如果脚本 A 今天执行过一次,请在第二次执行期间(例如 2 天后(检查脚本 A 之前是否已经执行过。

这可以通过任何事件日志或环境变量来完成吗?

编辑:请注意,对于此特定脚本,无法制作任何文本文件或日志。有没有办法做到这一点,而不会实际"物理"留下痕迹,而是依赖于脚本执行时设置的任何参数?

EDIT2:此脚本将以最少的权限执行,因此不仅没有管理员权限的帐户,而且也没有创建文本或日志文件的批准权限。

自我修改代码怎么样?这在技术上是作弊,因为更改是在脚本文件本身中完成的。但是,不会进行外部日志记录。

write-host -nonewline "Script has started"
$src = get-content $MyInvocation.MyCommand
$header = $src[0]
if($header -notmatch "^#") {
write-host " ...first time!" 
$newScript = @()
$newScript += "#"
$newScript += $src
set-content $MyInvocation.MyCommand $newScript
} else { write-host " ...nth time!" }

脚本读取自己的内容。如果第一行不以哈希开头,则为第一次调用。然后,该脚本将创建一组新的源代码。第一行是哈希,原始来源在那之后。然后覆盖原始脚本。

作为旁注,正如@Mathias R. Jessen指出的那样,日志但不日志的要求是自相矛盾的。但是,Windows 中提供了进程跟踪审核。此外,还有脚本块日志记录。理论上(并且具有适当的权限(,可以在Windows的事件日志中搜索以前的运行尝试。

我宁愿把为什么堆起来,找出根本原因,因为吃饭和保持蛋糕的要求听起来很像XY问题。

最新更新