我有一个用PowerShell编写的命令行参数脚本,该脚本接受任务计划程序中的服务器名称。但是,我的要求是在重新启动SQL Server时执行脚本,因此我将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)
在脚本中显示为空,因此需要在任务计划程序作业的参数部分中提及什么。
答案 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代理中创建作业,并设置要在服务器启动时运行的时间表。这样,您根本不需要从事件日志中读取内容。