batch-file - 如何防止 VBScript 独立运行?

标签 batch-file vbscript cmd wsh

我正在混合使用 VbScript 和 CMD,我可以轻松调用 VBScript

cscript.exe //NoLogo "%~dp0TASK.vbs" >>"%~dp0output.txt"

但是我需要禁用用户点击VBScript调用各种错误的功能,而不是通过批处理文件调用。

我的第一次尝试是在运行 cscript.exe 之前将变量设置到文本文件中,并在 VBScript 中使用错误处理来判断是否可以收集该变量,但它添加了太多脚本的时间。

VBScript 是否有办法判断它是由 CMD 启动的,还是通过双击启动的,并能够相应地执行操作?

最佳答案

这是一个简单的函数,检测父进程标题。您可以检查该进程是否由 CMD shell(标题为 cmd.exe)或双击(explorer.exe)启动:

If LCase(GetParentProcessCaption()) <> "cmd.exe" Then WScript.Quit

' the rest part of your code here

Function GetParentProcessCaption()
    With GetObject("winmgmts:\\.\root\CIMV2:Win32_Process.Handle='" & CreateObject("WScript.Shell").Exec("rundll32 kernel32,Sleep").ProcessId & "'")
        With GetObject("winmgmts:\\.\root\CIMV2:Win32_Process.Handle='" & .ParentProcessId & "'")
            With GetObject("winmgmts:\\.\root\CIMV2:Win32_Process.Handle='" & .ParentProcessId & "'")
                GetParentProcessCaption = .Caption
            End With
        End With
        .Terminate
    End With
End Function

在您的问题的上下文中,允许将参数从 CMD shell 进程传递到 WSH 脚本子进程的另一种方法可能会有用。它使用环境变量和 WScript.Shell 对象。考虑以下示例。

task.cmd 文件的代码:

set myvar=myvalue
wscript "%~dp0task.vbs"

对于 task.vbs 文件:

WScript.Echo CreateObject("WScript.Shell").Environment("process").Item("myvar")

我得到的输出如下:

cmd shell output

wsh output

请注意,只有子进程可以访问进程环境变量。

关于batch-file - 如何防止 VBScript 独立运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318670/

相关文章:

windows - 禁止使用 DIR 列出目录名称

windows - 具有多行主体的循环

windows - 在 .bat/.cmd 程序中更改 if block 中的变量

windows - 批处理文件 - 将日期时间格式从 YYYY/MM/DD 转换为 YYYY-MM-DD

sql-server-2005 - 从 cmd.exe 执行存储过程?

javascript - Protractor 和 cucumber - [启动器] 错误 : TypeError: Cannot read property 'strict' of undefined

sql-server - SSIS执行流程任务错误处理

vba - 带双引号的 RegExp 模式中的编译错误

powershell - 有没有办法在大型机终端窗口中自动执行简单的重复性任务?

windows - 分组条件在 VBScript 中是否正常工作?