远程计算机上的服务停止后运行powershell脚本

时间:2017-09-29 10:48:20

标签: sql-server powershell wmi

我有一个脚本可以重新启动服务器B上的一些服务,这个脚本可以从服务器A执行。我需要在服务器C上停止/启动SQL时执行此脚本。

我已经查看了WMI事件,如果我将它添加到SQL服务器(C)上,它就可以工作,但我无法建立从服务器到服务器A或B的远程连接。

所以我在服务器A上寻找一个“触发器/事件”,当远程服务器上的SQL启动/停止时触发。

我发现__EventFilter实例有一个PScomputerName变量,但我无法将其更改为本地计算机以外的其他名称。 这是事件/过滤器和消费者:

#Creating a new event filter
$instanceFilter = ([wmiclass]"\\.\root\subscription:__EventFilter").CreateInstance()
$instanceFilter.QueryLanguage = "WQL"
$instanceFilter.Query = "select * from __instanceModificationEvent within 5 where targetInstance isa 'win32_Service' and TargetInstance.Name='sql service'"
$instanceFilter.Name = "ServiceFilter"
#$instanceFilter.PSComputerName = "SQL server"
$instanceFilter.EventNamespace = 'root\cimv2'

$result = $instanceFilter.Put()
$newFilter = $result.Path

#Creating a new event consumer
$instanceConsumer = ([wmiclass]"\\.\root\subscription:ActiveScriptEventConsumer").CreateInstance()
$instanceConsumer.ScriptingEngine = "VBScript"
$instanceConsumer.ScriptFileName = "script.vbs"

$result = $instanceConsumer.Put()
$newConsumer = $result.Path

#Bind filter and consumer
$instanceBinding = ([wmiclass]"\\.\root\subscription:__FilterToConsumerBinding").CreateInstance()

$instanceBinding.Filter = $newFilter
$instanceBinding.Consumer = $newConsumer
$result = $instanceBinding.Put()
$newBinding = $result.Path

0 个答案:

没有答案