2010-06-15 11 views
0

Je suis vraiment frustré par l'extrait ci-dessous:Insérer une variable VBS dans une seule cité requête WMI

Dim objFSO, varSrc, varDest, varExt 

Set objFSO = CreateObject("Scripting.FileSystemObject") 

varSrc = WScript.Arguments(0) 
varDest = WScript.Arguments(1) 
varExt = WScript.Arguments(2) 

If objFSO.FolderExists(varSrc) Then 
    WScript.Echo varSrc 
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:" _ 
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
     ("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _ 
      & "Targetinstance ISA 'CIM_DirectoryContainsFile' AND " _ 
       & "TargetInstance.GroupComponent= " _ 
        & "'Win32_Directory.Name=""c:\\\\kk ""'") 
    Do 
     Set objLatestEvent = colMonitoredEvents.NextEvent 
     WScript.Echo objLatestEvent.TargetInstance.PartComponent 
    Loop 
Else 
    WScript.Echo "Bazinga" 
End If 

J'ai essayé de remplacer c: \\ kk avec varSrc mais il semble impossible WSH de reconnaître dans Requête WMI - pour ne pas mentionner il était dans une citation unique!

J'ai essayé chr (34) et cela n'a pas fonctionné. S'il vous plaît aider si possible. Très appréciée!

MISE À JOUR:

Merci beaucoup pour la réponse et des excuses pour les ambiguïtés.

varSrc est supposé être "C:\\\\kk". et la requête WMI ne pouvait pas le reconnaître. Permettez-moi d'expliquer par exemple:

La requête doit être analysée dans un tel:

SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' AND TargetInstance.GroupComponent= 'Win32_Directory.Name= ""c:\\\\KK""' 

J'ai testé la requête ci-dessus et il fonctionne! Cependant ce que j'ai besoin est de remplacer c:\\\\kk avec un argument pris de l'entrée de l'utilisateur, qui dans ce cas, est varSrc. Le problème que j'ai rencontré est soit la syntaxe est correcte, mais la requête WMI prendrait varSrc littéralement comme 'Directory.Name'; Ou dans l'autre sens - l'erreur de syntaxe ou une requête impossible à analyser.

Si la requête est:

("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _ 
      & "Targetinstance ISA 'CIM_DirectoryContainsFile' AND " _ 
       & "TargetInstance.GroupComponent= " _ 
        & "'Win32_Directory.Name=""varSrc""'") 

Le script fonctionnera sans erreur mais qu'il fait pas son travail de surveillance les fichiers nouvellement créés. Parce qu'il analyse le 'Directory.Name' comme littéral 'varSrc' au lieu de l'argument d'entrée utilisateur.

Si la requête est:

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
    ("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _ 
     & "Targetinstance ISA 'CIM_DirectoryContainsFile' AND " _ 
      & "TargetInstance.GroupComponent= " _ 
       & "'Win32_Directory.Name="""""&varSrc&"""""'") 

Il génère une erreur:

vmove.vbs(15, 2) SWbemServicesEx: Invalid query 
+0

Quelle erreur obtenez-vous lorsque vous exécutez cela? Aussi, pouvez-vous montrer à quoi cette requête est censée ressembler? Astuce: vous devez construire la requête sous la forme d'une variable chaîne et l'afficher avant de l'utiliser dans la requête, pour avoir une idée claire de ce que vous envoyez. – Todd

Répondre

1

Très probablement, varSrc contient le chemin du dossier avec antislashs, alors que votre requête WMI nécessite quatre antislashs comme le séparateur de chemin. Essayez de faire un remplacement de \ avec \\\\ dans varSrc avant de l'insérer dans la requête, comme ceci:

varSrc = Replace(varSrc, "\", "\\") 
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
    ("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE " _ 
     & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ 
      & "TargetInstance.GroupComponent= " _ 
       & "'Win32_Directory.Name=""" & varSrc & """'") 
+0

Merci beaucoup. Je viens de tester votre réponse. Ça marche! – jiaoziren

1

Pls. chk below script,

varSrc = Replace(varSrc, "\", "\\") 
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE " _ 
    & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ 
     & "TargetInstance.GroupComponent= " _ 
      & "Win32_Directory.Name=" & "'" & varSrc & "'") 
Questions connexes