Filesystemobject Textstream,执行 Textstream.Close 后立即消失(正在创建 .vbs 扩展名)

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

我遇到了一个让我很困惑的情况。我使用多年的简单代码以最奇怪的方式失败了。我有一种感觉,原因与反病毒垃圾或 GPO 有关,但即使是那些,我以前也看到过它们在这种情况下运行——但与我现在看到的完全不同。 注意 - 此代码对几个人来说一直运行良好,直到一个最终用户从 I.T 获得了一台新的 Surface 笔记本电脑,据称是为了更好地与 Teams 和 365 兼容。所有用户(工作,非-working) 在 Windows 10.

场景:

  1. 我正在使用 Scripting.Filesystemobject
  2. 设置对象变量(文本流意图),如fso.createtextfile
  3. 我正在创建的文件路径(名称)实际上是filename.vbs...这行执行的时候,我可以在文件夹中成功看到vbs文件
  4. 我用Textstream.Write在文件里放一些内容
  5. 然后我使用Textstream.Close(通常此时你会得到一个可靠、稳定、可用的文件)。 执行最后一行 Textstream.Close 后,文件立即从文件夹中消失 - 消失。

我要写入的文件夹与开始 > 运行 > %appdata% 相同 我也在 Documents 文件夹 (Environ$("USERPROFILE") & "\My Documents") 中尝试过这个并得到完全相同的结果

我见过可以阻止 VBS 运行 的组策略和 AV 内容,但这不是我的情况——我已经测试过这个用户,她没有问题:

  1. 在其中一个文件夹中创建一个 txt 文件
  2. 在其中一个文件夹中手动创建 .vbs 文件
  3. 甚至 运行 任一文件夹中的生成的 vbs 文件

但是不知何故,当我在代码中以编程方式创建 .VBS 时,第二次关闭文本流时,文件从文件夹中消失了。

有什么见解吗?我所做的互联网搜索没有关于这种情况的所有信息!!我需要 2 周的时间才能开票并获得 I.T 的任何帮助。

这是 Excel VBA,但我非常怀疑这个问题与 Excel 或 VBA 有任何关系...这是 [= 的标准用法60=] 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

它看起来确实像杀毒软件...

如果问题只是 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