VBS脚本等待返回

时间:2017-01-26 13:34:40

标签: powershell vbscript

我们在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

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

有没有办法让它在继续之前等待PowerShell脚本完成?

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

oSHELL.Run "powershell.exe -ExecutionPolicy Bypass -NoLogo -File .\PS_Script.ps1", 0, True

PS_Script.ps1

Start-Sleep -Seconds 15

Get-WmiObject -Class Win32_MappedLogicalDisk |
    Select-Object Name, ProviderName |
    Export-Csv .\PS_Data.txt -NoTypeInformation

1 个答案:

答案 0 :(得分:4)

您在true中包含Run参数的第二次尝试应该有效。

从命令提示符运行脚本后,提示立即返回的事实并不意味着脚本没有等待,因为脚本在不同的环境中运行到cmd

举个例子:

<强>的PowerShell

Start-Sleep -Seconds 5

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[System.Windows.Forms.MessageBox]::Show("powershell END") 

<强>的VBScript

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"

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

  1. 等待5秒
  2. 显示powershell END消息
  3. 在关闭powershell消息后显示vbs END消息
  4. 但是,从cmd运行时,即使上述步骤仍然正确完成,我也会在调用test.vbs后立即返回给我。

    也许您可以尝试在脚本中添加这样的消息框,以帮助您跟踪测试过程中发生的事情。