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

最佳答案

您在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"

现在无论是通过双击运行VBScript还是在命令提示符下调用test.vbs,我都可以看到预期的结果,即:
  • 等待5秒
  • 显示powershell END消息
  • 一旦关闭Powershell消息,则显示vbs END消息

  • 但是,从cmd运行它时,即使上述步骤仍正确完成,在我调用test.vbs时,提示符也会立即返回给我。

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

    关于powershell - VBS脚本等待返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41874677/

    10-15 19:27