powershell - 根据事件日志触发powershell

标签 powershell taskscheduler event-viewer

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

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

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

$(Source) 在启动 powerShell 时不会从事件 View 中获取事件源。您能告诉我如何获取事件源吗?

Screengrabfrom event viewer

根据评论中的建议,我已使用以下 XML 分支更新了我的任务计划程序作业

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

以上脚本已插入 <EventTrigger>分支。

下面是PowerShell CMD行输入脚本。

 param (
    [string]$server
 )

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

最佳答案

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

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

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

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

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

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

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

当然,那么您的脚本只需要通过 param() 支持这些输入。 block 在顶部,例如:

param($eventSource)

关于powershell - 根据事件日志触发powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53744938/

相关文章:

Powershell base64 与常规 base64

regex - Powershell 正则表达式用连字符替换下划线

azure - 如何在计划中的azure函数中运行powershell脚本

windows - 任务调度程序 - 仅针对特定任务运行事件

c# - 通过 Task Scheduler 的 Entity Framework 连接作为 NTAuthority/Anonymous Logon 连接

c# - 在 C# 中写入事件日志 - 写入应用程序日志时是否需要使用 EventLog.CreateEventSource?

ASP.NET Core 2.0 EventLog 更改事件查看器中的应用程序名称

c# - 如何在C#中获取PowerShell的Get-Command的 `Suggestion`?

c# - 除非使用 "run as admin",否则在 Windows 10 上以编程方式创建计划任务失败

logging - NTEventLogAppender 的源示例?