Search code examples
vbaantivirusgroup-policyfilesystemobject

Filesystemobject Textstream, immediately disappears upon executing Textstream.Close (.vbs extension being created)


I have a situation that is really flummoxing me. Simple code I've used for years is failing in the weirdest way. I have a feeling the cause is related to either anti-virus junk or GPO, but, even those, I have seen them operate before on this scenario--but nothing like how I am seeing it now. Note - this code has been working perfectly for several people, until one end-user got a new Surface laptop from I.T., purportedly for better compatibility with Teams and 365. ALL users (working, non-working) are on Windows 10.

Scenario:

  1. I'm using Scripting.Filesystemobject
  2. setting an object variable (Textstream intent), as fso.createtextfile
  3. The filepath (name) I am creating is actually filename.vbs...At the moment this line executes, I can see the vbs file successfully in the folder
  4. I use Textstream.Write to put some content in the file
  5. I then use Textstream.Close (normally at this point you get a solid, stable, useable file). Immediately upon execution of the last line, Textstream.Close, the file DISAPPEARS from the folder-GONE.

The folder I'm writing to is the same as Start > Run > %appdata% I've also tried this in Documents folder (Environ$("USERPROFILE") & "\My Documents") and get the exact same result

I've seen group policies and AV stuff that will prevent VBS from running, but that isn't my case--I've tested with this user, and she has no problem:

  1. Creating a txt file in either of those folders
  2. Manually creating a .vbs file in either of those folders
  3. Even RUNNING the resulting vbs file in either folder

But somehow when I programmatically create .VBS in code, the second I close the textstream, the file is gone from the folder.

Any insight? The internet searches I did were void of all information on this scenario!! It would take me 2 weeks to open a ticket and get any help from I.T.

This is Excel VBA, but I highly doubt the problem has anything to do with Excel nor VBA...this is standard usage of 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

Solution

  • It does look like an antivirus thing...

    If the issue is just the vbs extension though, you can use something like this:

    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