从 Powershell 调用 VBScript ..这是正确的方法吗?

Jas*_*son 5 vbscript powershell

我有一个 VBscript 文件。我在 Windows 2012 服务器上使用 CScript 运行此 VBscript。VBscript 在服务器上运行良好。

但我需要从 Powershell 调用这个 VBScript 文件。这就是我所做的。

为简单起见,这就是我的 VBscript 文件中的内容

回声.vbs

Msgbox("hello world")
Run Code Online (Sandbox Code Playgroud)

我写了test.ps1

    $acommand = "C:\Windows\System32\Cscript.exe C:\deleteit\echo.vbs"

    Invoke-Expression $acommand
Run Code Online (Sandbox Code Playgroud)

js2*_*010 5

除了简单的跑步

Cscript.exe C:\deleteit\echo.vbs //nologo
Run Code Online (Sandbox Code Playgroud)

有一个 com 对象可以将 vbscript 直接嵌入到 powershell 中,但它只是 32 位的。有一种方法可以以 32 位运行作业。在 powershell 7 中,您必须使用 32 位版本。

start-job {
  $sc = New-Object -ComObject MSScriptControl.ScriptControl.1
  $sc.Language = 'VBScript'
  $sc.AddCode('
    Function MyFunction(byval x)
      MyFunction = 2 * x
    End Function
  ')
  
  $sc.codeobject.MyFunction(1)
  $sc.codeobject.MyFunction(2)
} -runas32 | wait-job | receive-job
Run Code Online (Sandbox Code Playgroud)

输出:

2
4
Run Code Online (Sandbox Code Playgroud)


小智 3

这是运行外部应用程序的正确方法,如果您使用命令行 exe 或 VBS 脚本,则可以使用相同的技术。

就我个人而言,我希望将功能添加到 PowerShell 脚本中,而不是调用外部 VBS 脚本,但这只是我的 2 美分价值:)