VBS脚本等待返回

Dar*_*te1 2 vbscript powershell

我们在 vbs 的帮助下启动 PowerShell 脚本以避免它生成的弹出窗口。这可以完美地工作,如下所示:

PS_Launcher.vbs

'run window totally hidden
Dim oSHELL
Set oSHELL = CreateObject("WScript.Shell")
oSHELL.CurrentDirectory = "C:\users\bob\AppData\Local\Temp"
oSHELL.Run "powershell.exe -ExecutionPolicy Bypass -NoLogo -File .\PS_Script.ps1", 0
Set oSHELL = Nothing
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,当我们从计划任务中或从命令提示符 (CMD) 运行此命令时,它不会等待 PowerShell 脚本完成并立即返回提示符。

有没有办法让它等待 PowerShell 脚本完成后再继续?

我们已按照 中所述尝试了以下操作bWaitForReturn,但没有成功:

oSHELL.Run "powershell.exe -ExecutionPolicy Bypass -NoLogo -File .\PS_Script.ps1", 0, True
Run Code Online (Sandbox Code Playgroud)

PS_Script.ps1

Start-Sleep -Seconds 15

Get-WmiObject -Class Win32_MappedLogicalDisk |
    Select-Object Name, ProviderName |
    Export-Csv .\PS_Data.txt -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

Bas*_*sie 5

您将true论点包含在内的第二次尝试Run应该有效。

从命令提示符运行脚本后立即返回提示符这一事实并不意味着脚本没有等待,因为脚本在与cmd.

举个例子:

电源外壳

Start-Sleep -Seconds 5

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[System.Windows.Forms.MessageBox]::Show("powershell END") 
Run Code Online (Sandbox Code Playgroud)

VB脚本

Dim oSHELL
Set oSHELL = CreateObject("WScript.Shell")
oSHELL.Run "powershell.exe -ExecutionPolicy Bypass -NoLogo -File C:\test\test.ps1", 0, True
Set oSHELL = Nothing
MsgBox "vbs END"
Run Code Online (Sandbox Code Playgroud)

现在,无论我是通过双击运行 VBScript 还是test.vbs从命令提示符调用,我都会看到预期的结果,即:

  1. 等待 5 秒
  2. 显示powershell END信息
  3. vbs ENDpowershell 消息消失后​​显示消息

test.vbs但是,当从 cmd 运行它时,尽管上述步骤仍然正确完成,但只要我调用 ,提示符就会返回给我。

也许您可以尝试在脚本中添加一些像这样的消息框,以帮助您跟踪测试期间发生的情况。

  • @Bassie 使用“cscript.exe”常规输出(错误消息,“WScript.Echo”,...)转到 STDOUT/STDERR,而不是创建阻止进一步执行的弹出消息。 (4认同)