Filesystemobject Textstream, немедленно исчезает при выполнении Textstream.Close (создается расширение .vbs)

У меня есть ситуация, которая меня очень смущает. Простой код, который я использовал годами, терпит неудачу самым странным образом. У меня есть ощущение, что причина связана либо с антивирусным мусором, либо с GPO, но даже они, я видел, как они работали раньше по этому сценарию, но совсем не так, как я вижу это сейчас. Примечание. Этот код отлично работал у нескольких человек, пока один конечный пользователь не получил от ИТ новый ноутбук Surface якобы для лучшей совместимости с Teams и 365. ВСЕ пользователи (рабочие и нерабочие) используют Windows 10. .

Сценарий:

  1. Я использую Scripting.Filesystemobject
  2. установка переменной объекта (намерение Textstream), как fso.createtextfile
  3. Путь к файлу (имя), который я создаю, на самом деле является именем файла.vbs... В момент выполнения этой строки я успешно вижу файл vbs в папке
  4. Я использую Textstream.Write, чтобы поместить некоторый контент в файл.
  5. Затем я использую Textstream.Close (обычно на этом этапе вы получаете надежный, стабильный, пригодный для использования файл). Сразу после выполнения последней строки, Textstream.Close, файл ИСЧЕЗАЕТ из папки-ИСЧЕЗ.

Папка, в которую я пишу, такая же, как Пуск > Выполнить > %appdata% Я также пробовал это в папке «Документы» (Environ$(USERPROFILE) и \My Documents) и получаю тот же результат.

Я видел групповые политики и антивирусы, которые препятствуют запуску VBS, но это не мой случай — я тестировал с этим пользователем, и у нее не было проблем:

  1. Создание txt файла в любой из этих папок
  2. Создание вручную файла .vbs в любой из этих папок
  3. Даже ЗАПУСК полученного файла vbs в любой папке

Но почему-то, когда я программно создаю .VBS в коде, второй я закрываю текстовый поток, файл исчез из папки.

Любое понимание? Поиски в Интернете, которые я сделал, не содержали никакой информации об этом сценарии! Мне потребовалось бы 2 недели, чтобы открыть тикет и получить любую помощь от IT.

Это Excel VBA, но я очень сомневаюсь, что проблема связана с Excel или VBA... это стандартное использование Windows scripting.filesystemobject:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'initiate full backup vbs script:
Dim ts As Object, fso As Object, strScriptText As String, strScriptPath As String
'populate our variable with the full text of the script: found on QLoader in this range:
strScriptText = ThisWorkbook.Worksheets("QLoader").Range("z_BackupScriptText").Value
'replace the text "placeholder" with this workbook's actual full path/name:
strScriptText = Replace(strScriptText, "placeholder", ThisWorkbook.FullName)

'fire up FSO:
Set fso = CreateObject("scripting.filesystemobject")
'determine the new VBS file's path
strScriptPath = Environ("AppData") & "\Backup_" & Format(Now, "yymmddhhmmss") & ".vbs"
'create our textstream object:
Set ts = fso.createtextfile(strScriptPath)
'write our script into it
ts.write strScriptText
'save and close it
ts.Close 'RIGHT HERE THE FILE DISAPPEARS FROM THE FOLDER ***********

'GO:
Shell "wscript " & strScriptPath, vbNormalFocus

End Sub

person ISAAC    schedule 05.10.2020    source источник


Ответы (1)


Похоже на антивирус...

Если проблема заключается только в расширении vbs, вы можете использовать что-то вроде этого:

Sub tester()

    Dim ts As Object, fso As Object, strScriptText As String, strScriptPath As String
    
    Set fso = CreateObject("scripting.filesystemobject")
    
    strScriptPath = Environ("AppData") & "\Backup_" & Format(Now, "yymmddhhmmss") & ".txt"
    
    Set ts = fso.createtextfile(strScriptPath)
    
    ts.write "Msgbox ""Hello"""
    
    ts.Close
    
    'need to specify the script engine to use
    Shell "wscript.exe /E:vbscript """ & strScriptPath & """ ", vbNormalFocus

End Sub
person Tim Williams    schedule 05.10.2020
comment
О боже! Это похоже на отличный вариант решения, о котором я не знал. Я был в процессе использования этого подхода - если он позволит мне создать файл .txt, затем переименуйте файл (еще не проверял с пользователем), но вам очень приятно знать, я попробую это и опубликовать обратно, спасибо. - person ISAAC; 05.10.2020
comment
Вам действительно нужно использовать vbscript здесь? Обычно вы можете использовать VBA для тех же задач... - person Tim Williams; 05.10.2020
comment
Очень справедливый вопрос. В этом случае необходимо: Обеспечить очень простой, невидимый метод создания полной резервной копии книги Excel. Без создания каких-либо других файлов или ярлыков, которые пользователь должен инициировать. Итак, способ, которым я решил это, заключается в том, чтобы в событии закрытия рабочей книги VBA создал файл VBScript (который сам содержит 40-секундное ожидание, а затем копирует тот же файл Excel, который его запустил), а затем начать работу файл vbs, когда он закрывается. - person ISAAC; 05.10.2020
comment
Для этого вы можете использовать SaveCopyAs внутри события. - person Tim Williams; 05.10.2020
comment
Все, что я могу придумать, это: ВАУ. По какой-то причине за 15 лет использования VBA я совершенно упустил это. Чувствовать себя глупо! Понятия не имею, как я пропустил это, но не знал об этом. Благодарю вас! Вы правы - это был бы абсолютно правильный путь. Я очень рад, что вы научили меня тому, что вы сделали с обстрелом cscript, хотя - ценный материал. Спасибо еще раз. - person ISAAC; 05.10.2020
comment
Я имею в виду вскрипт. - person ISAAC; 05.10.2020