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
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