2017-10-06 69 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

相關問題