首页 > 解决方案 > 基于事件日志触发powershell

问题描述

我有一个用 PowerShell 编写的命令行参数脚本,它接受来自任务调度程序的服务器名称。但是,我的要求是在 SQL 服务器重新启动时执行脚本,因此我已将 PowerShell 脚本附加到事件 17069。但我无法动态传递事件源,在这种情况下,事件源将是服务器名称。

下面是任务调度程序作业的参数部分

-Command "& 'D:\SQLJobs\PS\readErrorLogFile.ps1' '$(Source)'"

$(Source) 在触发 powerShell 时不会从事件视图中获取事件源。能否请您告诉我如何获取事件源。

来自事件查看器的屏幕截图

正如评论中所建议的,我已经使用下面的 XML 分支更新了我的任务调度程序作业

<ValueQueries>
<Value name="server">Source</Value>
</ValueQueries>

上面的脚本已被插入到<EventTrigger>分支中。

下面是 PowerShell CMD 行输入脚本。

 param (
    [string]$server
 )

请让我知道任务调度程序作业的参数部分中需要提及的内容,因为$(server)脚本中显示为 null。

标签: powershelltaskschedulerevent-viewer

解决方案


我认为您正在寻找的内容如下所述:

从事件创建任务后,您需要在任务计划程序中右键单击它并执行导出.. 以将其保存为 XML。然后修改 XML 以包含对要发送到脚本(在该<EventTrigger>部分内)的值的值查询。

例如,要获取您添加的事件源:

<ValueQueries>
  <Value name="eventSource">Event/System/Provider/@Name</Value>
</ValueQueries>

现在删除任务并通过导入修改后的 XML 文件重新创建它。

您现在可以将任务的操作配置为运行 PowerShell.exe 和您的脚本,然后引用您用于上述值查询的任何名称作为脚本的参数输入。例如:

powershell.exe .\TriggerScript.ps1 -eventSource $(eventSource)

当然,您的脚本只需要通过param()顶部的一个块来支持这些输入,例如:

param($eventSource)

推荐阅读