У меня есть следующая проблема:Run Исполняемые Без WScript
- Когда пользователь входит в систему через Citrix, сценарий входа пишет в сети файл
- После того как файл был записан, уведомить локальный компьютер, чтобы он мог выполнять некоторые операции
- Как только это будет сделано, перезапустите сеанс (я знаю, как это сделать, моя трудность связана с мониторингом сетевого файла из локально хранимого файла FileWatcher и последующим запуском локального exe)
Я планирую достичь этого:
- Регистрация в
ActiveEventScriptConsumer
на машине, которая будет следить за файл, а затем запустить исполняемый файл, когда он модифицируется - Первые действия Исполняемый файл занимает в спать в течение 5 минут, а затем выполнить действия, мне это нужно делать
сдерживающих
Проблема у меня в том, что ActiveEventScriptConsuemr
s не может использовать Wscript
объект, то есть я не могу запустить ехе с:
objShell.Run("C:\MyProgram.exe")
Есть другой способ запуска исполняемого файла из VBScript, который может делать с EventConsumer
? В качестве альтернативы, могу ли я зарегистрировать эту подписку, когда сценарий работает, использует нечто, отличное от VBScript?
Я бы включил Wait
в свой сценарий входа в систему, но я не могу отложить это, потому что это приводит к тому, что мои групповые политики запускаются через 5 минут после входа в систему!
Я попытался взглянуть на запуск командного файла из VBS, но это также использует WScript
.
Выполняется проверка того, что происходит, когда начинается сеанс (Citrix), поэтому я не могу использовать обычный вход в Windows как триггер, потому что иногда пользователь будет входить в сеанс, даже если сам компьютер был зарегистрирован на некоторое время.
Любая помощь очень ценится!
событий Подписка Код:
$Computername = $env:COMPUTERNAME
$query = @"
SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'CIM_DataFile' AND TargetInstance.Name='C:\\test\\filewatching\\tester.txt'
"@
$instanceFilter = ([WMICLASS]"\\$Computername\root\subscription:__EventFilter").CreateInstance()
$instanceFilter.QueryLanguage = 'WQL'
$instanceFilter.Query = $query
$instanceFilter.Name = 'EventFilterNameHere'
$instanceFilter.EventNameSpace = 'root/CIMV2'
$result = $instanceFilter.Put()
$script =
@"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("c:\test\filewatching\Log.log", 8, True)
objFile.WriteLine "1"
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\MyProgran.exe")
Set objShell = Nothing
objFile.WriteLine "2"
objFile.Close
"@
$instanceConsumer = ([wmiclass]"\\$Computername\root\subscription:ActiveScriptEventConsumer").CreateInstance()
$instanceConsumer.Name = 'ConsumerNameHere'
$instanceConsumer.ScriptingEngine = 'VBScript'
$instanceConsumer.ScriptFilename = ''
$instanceConsumer.ScriptText = $script
$instanceConsumer.Put()
[object]$Filter = (Get-WMIObject -Computername $Computername -Namespace root\Subscription -Class __EventFilter | Sort Name)
[object]$Consumer = (Get-WMIObject -Computername $Computername -Namespace root\Subscription -Class __EventConsumer | Sort Name)
$instanceBinding = ([wmiclass]"\\$Computername\root\subscription:__FilterToConsumerBinding").CreateInstance()
$instanceBinding.Filter = $Filter
$instanceBinding.Consumer = $Consumer
$instanceBinding.Put()
Как насчет использования запланированной задачи? Установите триггер для входа в систему и добавьте пятиминутную задержку. – vonPryz
@vonPryz Это хорошая идея. Есть ли способ запуска при входе в сеанс citrix вместо входа в сам компьютер? – Bassie
Зачем вам это нужно? Какую проблему вы решаете? –