对于u InstanceCreationEvent WMI订阅,应如何将CIM_数据文件名传递给内嵌ActiveScriptEventConsumer VBScript?

对于u InstanceCreationEvent WMI订阅,应如何将CIM_数据文件名传递给内嵌ActiveScriptEventConsumer VBScript?,vbscript,wmi,Vbscript,Wmi,我需要在从一个目录创建文件时自动移动文件,并且只移动触发事件的文件…而不是目录中的每个文件 我正在尝试使用powershell和ActiveScriptEventConsumer以及内联VBScript设置WMI订阅,我可以在其中将文件名传递给内联VBScript PS> $evtConsumer.ScriptText = "WITH CreateObject(""Scripting.FileSystemObject"") >> .MoveFile """ $

我需要在从一个目录创建文件时自动移动文件,并且只移动触发事件的文件…而不是目录中的每个文件

我正在尝试使用powershell和ActiveScriptEventConsumer以及内联VBScript设置WMI订阅,我可以在其中将文件名传递给内联VBScript

    PS> $evtConsumer.ScriptText = "WITH CreateObject(""Scripting.FileSystemObject"") 
    >> .MoveFile """ $EventArgs.NewEvent.Name """, ""[target path here]""
    >> END WITH"
当我请求$evtConsumer.ScriptText时,控制台将返回以下内容

    PS> $evtConsumer.ScriptText
    WITH CreateObject("Scripting.FileSystemObject")
    .MoveFile "", "[target path]"
    END WITH

毫不奇怪,当我在目标目录中创建文件时,什么也没有发生。

这将使用VBScript设置WMI订阅

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set MonitoredEvents = WMI.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""C:\\\\Scripts""'")
Do
    WMIPath = Split(MonitoredEvents.NextEvent.TargetInstance.PartComponent, "=")(1)
    FilePath = Replace(WMIPath, "\\", "\")
'   FSO.CopyFile  filepath, "C:\", vbtrue 
    wscript.echo filepath
Loop
如果你想让你的程序像服务一样。在Windows中使用任务计划程序,您可以选择自己或其他用户。注意:如果您将其配置为在未登录时运行,则在登录时它将不可见。Windows为这样的程序/服务内置了安全帐户

关于任务调度器


关于服务账户

CatCat谢谢你的帖子。这是否会创建对事件的永久WMI订阅?我可以让它在一个临时WMI订阅上工作。文件循环,直到你杀死它。好的,如果我执行上述操作,然后关闭会话,甚至完全注销服务器,脚本将继续运行?如果你这样配置它。这只是一个程序。谢谢猫。不过,我对使用WMI还不熟悉,不知道“以这种方式配置”是什么意思。如何将上述脚本配置为在特定会话之外持久化?