【问题标题】:Trigger powershell based on event log基于事件日志触发powershell
【发布时间】:2019-05-13 16:06:32
【问题描述】:

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

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

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

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

按照 cmets 中的建议,我已使用以下 XML 分支更新了我的任务调度程序作业

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

以上脚本已插入&lt;EventTrigger&gt;Branch。

下面是 PowerShell CMD 行输入脚本。

 param (
    [string]$server
 )

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

【问题讨论】:

    标签: powershell taskscheduler event-viewer


    【解决方案1】:

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

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

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

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

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

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

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

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

    param($eventSource)
    

    【讨论】:

    • 感谢您的更新,马克。我已经用我面临的当前问题更新了这个问题。请看一下。
    • 您需要使您的值查询条目&lt;Value name="eventSource"&gt;Event/System/Provider/@Name&lt;/Value&gt;(注意您需要在更改后删除/重新创建任务)然后将您的命令修改为-Command "&amp; 'D:\SQLJobs\PS\readErrorLogFile.ps1' -server $(eventSource)"
    • 好的,让我检查一下并回复您。
    【解决方案2】:

    另一种解决方案可能是在 SQL Server 代理中创建一个作业,并将计划设置为在服务器启动时运行。这样一来,您根本不需要读取事件日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 2021-05-14
      • 2021-11-26
      • 2018-03-24
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多