Powershell WMI:在没有任何 errors/exceptions 的情况下运行,但不执行脚本
Powershell WMI: Runs without any errors/exceptions, however doesn't execute script
$filter = ([wmiclass]"\.\root\subscription:__EventFilter").CreateInstance()
$filter.QueryLanguage = "WQL"
$filter.Query = "Select * from __InstanceCreationEvent within 5 where targetinstance isa 'win32_logicaldisk'"
$filter.Name = "USBFilter"
$filter.EventNamespace = 'root\cimv2'
$result = $filter.Put()
$filterPath = $result.Path
$consumer = ([wmiclass]"\.\root\subscription:CommandLineEventConsumer").CreateInstance()
$consumer.Name = 'USBConsumer'
$consumer.CommandLineTemplate = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe –ExecutionPolicy Bypass -file C:\test.ps1"
$consumer.ExecutablePath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$consumer.WorkingDirectory = "C:\"
$result = $consumer.Put()
$consumerPath = $result.Path
$bind = ([wmiclass]"\.\root\subscription:__FilterToConsumerBinding").CreateInstance()
$bind.Filter = $filterPath
$bind.Consumer = $consumerPath
$result = $bind.Put()
$bindPath = $result.Path
上面的代码应该是 运行 当 windows 检测到插入 USB 设备时的脚本 运行 没问题(没有 error/warnings/exceptions)但是在插入时设备的脚本,它应该显示一个消息框。没有。我自己测试了触发脚本,对话框显示正常。
我真的不太熟悉 WMI,持久性更不熟悉,所以任何帮助都将不胜感激
由于事件使用者将由 SYSTEM
帐户下的 WMI 主机进程 运行 调用,因此您不会在自己的桌面会话中看到任何内容。
如果您更改 C:\test.ps1
内容以改为写入事件日志:
$LogSource = "USB Detector"
if(-not [System.Diagnostics.EventLog]::SourceExists($LogSource))
{
New-EventLog -LogName Application -Source $LogSource
}
Write-EventLog -LogName Application -Source $LogSource -EventId 100 -Message "New disk attached!"
您会发现它运行良好:
$filter = ([wmiclass]"\.\root\subscription:__EventFilter").CreateInstance()
$filter.QueryLanguage = "WQL"
$filter.Query = "Select * from __InstanceCreationEvent within 5 where targetinstance isa 'win32_logicaldisk'"
$filter.Name = "USBFilter"
$filter.EventNamespace = 'root\cimv2'
$result = $filter.Put()
$filterPath = $result.Path
$consumer = ([wmiclass]"\.\root\subscription:CommandLineEventConsumer").CreateInstance()
$consumer.Name = 'USBConsumer'
$consumer.CommandLineTemplate = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe –ExecutionPolicy Bypass -file C:\test.ps1"
$consumer.ExecutablePath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$consumer.WorkingDirectory = "C:\"
$result = $consumer.Put()
$consumerPath = $result.Path
$bind = ([wmiclass]"\.\root\subscription:__FilterToConsumerBinding").CreateInstance()
$bind.Filter = $filterPath
$bind.Consumer = $consumerPath
$result = $bind.Put()
$bindPath = $result.Path
上面的代码应该是 运行 当 windows 检测到插入 USB 设备时的脚本 运行 没问题(没有 error/warnings/exceptions)但是在插入时设备的脚本,它应该显示一个消息框。没有。我自己测试了触发脚本,对话框显示正常。
我真的不太熟悉 WMI,持久性更不熟悉,所以任何帮助都将不胜感激
由于事件使用者将由 SYSTEM
帐户下的 WMI 主机进程 运行 调用,因此您不会在自己的桌面会话中看到任何内容。
如果您更改 C:\test.ps1
内容以改为写入事件日志:
$LogSource = "USB Detector"
if(-not [System.Diagnostics.EventLog]::SourceExists($LogSource))
{
New-EventLog -LogName Application -Source $LogSource
}
Write-EventLog -LogName Application -Source $LogSource -EventId 100 -Message "New disk attached!"
您会发现它运行良好: