如何通过 PowerShell 脚本检测 Windows 服务器上是否存在新服务

如何通过 PowerShell 脚本检测 Windows 服务器上是否存在新服务

我们需要检测应用程序服务器上新服务的安装。这些是 Windows 2016 和 2019 服务器。我决定编写并安排一个每天运行两次的 PS 脚本。此脚本将在早上计算现有服务的数量。它将在晚上再次运行。如果晚上的服务数量较高,它将在事件查看器日志中创建一个条目。这将由 SCOM 拾取并生成警报。

这是我目前所做的:

    $Kaizen = (Get-Service | Measure.Object).Count
    $Vic = 800 #The 800 is just an arbitrary number used for testing purposes

        If($Vic -gt $Kaizen) 
           {
            Write-Eventlog -LogName "Windows Powershell" -Source 'Pwershell' -Entrytype Error 
            -EventId 45874 -Message "New Service detected"
           }

上述脚本可以工作,但我更希望不要使用 $Vic 中的静态数据。最好让脚本在早上捕获服务数量,然后将其存储起来,并在晚上重新用于比较。其次,我们需要脚本在 -Message 中包含检测到的新服务的名称或描述。

答案1

通过使用服务安装事件,您可以做得比计算系统服务的数量更好。

要使用的事件是 事件 ID 7045:系统中安装了新服务

主题中指明的用户安装了一项新服务。主题通常会将安装的服务标识为本地系统 (SYSTEM),作为本机 Windows 组件的一部分,因此您无法确定实际是谁启动了安装。

该事件记录以下信息:

主题

  • 安全 ID
  • 帐户名称
  • 帐户域
  • 登录ID

服务信息

  • 服务名称
  • 服务启动类型
  • 服务帐户

故障信息

  • 原因
  • 返回代码

您的 PowerShell 可以查阅事件查看器日志。或者,您可以通过任务计划程序创建一个事件触发器,该触发器将使用所有详细信息调用您的脚本并记录或通过电子邮件发送它们。

相关内容