根据事件日志触发Powershell

时间:2018-12-12 14:12:50

标签: powershell taskscheduler event-viewer

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

下面是任务计划程序作业的参数部分

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

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

Screengrabfrom event viewer

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

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

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

下面是PowerShell CMD行输入脚本。

 param (
    [string]$server
 )

请告诉我,由于$(server)在脚本中显示为空,因此需要在任务计划程序作业的参数部分中提及什么。

2 个答案:

答案 0 :(得分:3)

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

根据事件创建任务后,需要在“任务计划程序”中右键单击它,然后执行Export ..将其另存为XML。然后修改XML,以包含要发送到脚本(在version: "2" services: app: build: context: . dockerfile: Dockerfile.dev depends_on: - redis - db volumes: - .:/app - node-modules:/app/node_modules - ./tmp:/data/tmp command: bash -c "npm start" ports: - "3000:3000" - "3001:3001" environment: - NODE_ENV=development - DATABASE_URL=********************** - REDIS_URL=redis://redis/0 - WEB_PROCESSES=1 - WORKER_PROCESSES=1 - MANDRILL_API_KEY=**************** - SMTP_FROM_ADDRESS=*************** - HTTP_AUTH_ENABLED=TRUE - BASE_URL=****************** # worker: # build: # context: . # dockerfile: Dockerfile.dev # volumes: # - .:/app # - node-modules:/app/node_modules # command: /app/node_modules/.bin/nodemon --exec /app/node_modules/.bin/babel-node --presets=es2015 -- src/worker.js db: image: "postgres:9.5.3" environment: # POSTGRES_USER: postgres POSTGRES_DB: ticketsystem ports: - "5432:5432" redis: image: "redis:4.0.0-alpine" volumes: node-modules: {} 部分中的值)的值查询。

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

<EventTrigger>

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

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

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

当然,您的脚本只需要通过顶部的powershell.exe .\TriggerScript.ps1 -eventSource $(eventSource) 块来支持这些输入,例如:

param()

答案 1 :(得分:1)

另一种解决方案可能是在SQL Server代理中创建作业,并设置要在服务器启动时运行的时间表。这样,您根本不需要从事件日志中读取内容。