我有一个用 PowerShell 编写的命令行参数脚本,它接受来自任务计划程序的服务器名称。然而,我的要求是在 SQL 服务器重新启动时执行脚本,因此我已将 PowerShell 脚本附加到事件 17069。但我无法动态传递事件源,在本例中为服务器名称。
下面是任务调度程序作业的参数部分
-Command "& 'D:\SQLJobs\PS\readErrorLogFile.ps1' '$(Source)'"
$(Source) 在启动 powerShell 时不会从事件 View 中获取事件源。您能告诉我如何获取事件源吗?
根据评论中的建议,我已使用以下 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/