powershell - 基于事件日志触发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。
解决方案
我认为您正在寻找的内容如下所述:
从事件创建任务后,您需要在任务计划程序中右键单击它并执行导出.. 以将其保存为 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)
推荐阅读
- c++ - CMake 外部项目 BUILD_COMMAND 失败
- c# - 实体框架 GetManifestResourceStream 间歇性失败
- gambas - GAMBAS3 - 在第二个屏幕上显示表格
- linux - 使用 gitlab ci docker-in-docker setup 部署 docker 容器
- powershell - 遍历 XML
- node.js - VS Code 调试控制台中不显示 grunt.log.writeln
- opencv - OpenCV-3.4.0 安装:“make -j8”失败
- r - R 中基于语言的处理:在 dfm 中选择具有特定逐点互信息 (PMI) 值的特征
- java - 如何知道另一个线程是否进行 SynchronousQueue 轮询?
- javascript - Vuejs - 将输入的源`index/id`映射/获取到元素`index/id`以进行更新