2017-10-06 35 views
-1

我有一个VBscript文件。我在Windows 2012服务器上使用CScript运行此VBscript。 VBscript在服务器上运行良好。从Powershell调用VBScript ..这是正确的方式来做到这一点?

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

为简单起见,这是我在我的VBScript文件

echo.vbs

Msgbox("hello world") 

我写的test.ps1

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

    Invoke-Expression $acommand 
+0

...发生了什么?我建议,如果可能的话,你将你的VBS转换为PS,并避免这种情况。你基本上是从现代脚本语言中调用一种老式的脚本语言。如果你坚持一个平台,它会更简单 –

+1

你为什么这么做?运行exe的正确方法是*仅运行一个exe *。 PowerShell是一个shell,它可以直接运行。 'PS C:\> c:\ windows \ system32 \ cscript.exe c:\ deleteit \ echo.vbs' – TessellatingHeckler

+0

PS C:\> C:\> cd c:\ windows \ system32 \ cscript.exe c:\ deleteit \ echo.vbs C:\> cd:术语'C:\> cd'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,如果包含路径,请检查路径是否正确,然后重试。 (C:\ windows \ system32 \ cscript.exe c:\ deleteit \ echo.vbs + ~~~~~~ + CategoryInfo:ObjectNotFound:(C:\ Program Files \ )在线:1 char:1 + C:\> \> cd:String)[],CommandNotFo undException + FullyQualifiedErrorId:CommandNotFoundException – Jason

回答

0

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

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

+0

“*这是运行外部应用程序的正确方法*” - 事实并非如此。直接运行应用程序是最正确的,如果必须在字符串中处理路径中的空格,那么'&'调用运算符是最不错的选择,如果您需要使用参数来运行“Start-Process”和窗口样式和等待。 'Invoke-Expression'是最不对的 - 它将一个powershell命令封装到一个字符串中并将它反馈到powershell引擎中。它是循环和冗余的 - 如果从字符串中取出并不馈送到invoke-expression中,字符串中的任何内容都将起作用。 – TessellatingHeckler

+0

@TessellatingHeckler问题是首先使用这种VBScript而不是使用PowerShell。我不认为加雷斯所说的是错误的,如果你们双方都同意的话,那么反对票就是不体面的。 – Lankymart

+0

我有一个原因,我不使用PowerShell。我写的VB脚本使用的是DLL。即使我在盒子上注册,powershell说它找不到它。但VBScript可以看到DLL。所以我不得不使用VBscript – Jason

相关问题