我有一个脚本可以重新启动服务器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