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.
场景:
- 我正在使用 Scripting.Filesystemobject
- 设置对象变量(文本流意图),如fso.createtextfile
- 我正在创建的文件路径(名称)实际上是filename.vbs...这行执行的时候,我可以在文件夹中成功看到vbs文件
- 我用Textstream.Write在文件里放一些内容
- 然后我使用Textstream.Close(通常此时你会得到一个可靠、稳定、可用的文件)。 执行最后一行 Textstream.Close 后,文件立即从文件夹中消失 - 消失。
我要写入的文件夹与开始 > 运行 > %appdata% 相同
我也在 Documents 文件夹 (Environ$("USERPROFILE") & "\My Documents") 中尝试过这个并得到完全相同的结果
我见过可以阻止 VBS 运行 的组策略和 AV 内容,但这不是我的情况——我已经测试过这个用户,她没有问题:
- 在其中一个文件夹中创建一个 txt 文件
- 在其中一个文件夹中手动创建 .vbs 文件
- 甚至 运行 任一文件夹中的生成的 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
我遇到了一个让我很困惑的情况。我使用多年的简单代码以最奇怪的方式失败了。我有一种感觉,原因与反病毒垃圾或 GPO 有关,但即使是那些,我以前也看到过它们在这种情况下运行——但与我现在看到的完全不同。 注意 - 此代码对几个人来说一直运行良好,直到一个最终用户从 I.T 获得了一台新的 Surface 笔记本电脑,据称是为了更好地与 Teams 和 365 兼容。所有用户(工作,非-working) 在 Windows 10.
场景:
- 我正在使用 Scripting.Filesystemobject
- 设置对象变量(文本流意图),如fso.createtextfile
- 我正在创建的文件路径(名称)实际上是filename.vbs...这行执行的时候,我可以在文件夹中成功看到vbs文件
- 我用Textstream.Write在文件里放一些内容
- 然后我使用Textstream.Close(通常此时你会得到一个可靠、稳定、可用的文件)。 执行最后一行 Textstream.Close 后,文件立即从文件夹中消失 - 消失。
我要写入的文件夹与开始 > 运行 > %appdata% 相同 我也在 Documents 文件夹 (Environ$("USERPROFILE") & "\My Documents") 中尝试过这个并得到完全相同的结果
我见过可以阻止 VBS 运行 的组策略和 AV 内容,但这不是我的情况——我已经测试过这个用户,她没有问题:
- 在其中一个文件夹中创建一个 txt 文件
- 在其中一个文件夹中手动创建 .vbs 文件
- 甚至 运行 任一文件夹中的生成的 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