2017-10-21 226 views
0

我在.vbs中有以下vb脚本代码。我想通过powershell调用.vbs,并在powershell中捕获var1,var2 & var3的输出。从powershell运行VBS并捕获输出

public function GenerateResponseFile() 

    Dim objServiceLogon 
    Dim var1 
    Dim var2 
    Dim var3 

    var1 = "" 
    var2="" 
    var3="" 

    set objServiceLogon = CreateObject("DSServiceLogonCOM.CoServiceLogon") 
    objServiceLogon.DSGetDetails "ABCSVC", "ABCDE", var1, var2, var3 

End function 
+1

如果是这样的总和将VBScript的,我建议你只需右键它直接在PowerShell中。 –

回答

1

将脚本重写为PowerShell会容易得多。

假设库注册:

$var1 = '' 
$var2 = '' 
$var3 = '' 
$objServiceLogon = New-Object -ComObject "DSServiceLogonCOM.CoServiceLogon" 
$objServiceLogon.DsGetDetails("ABCSVC", "ABCDE", $var1, $var2, $var3) 

MS具有documents与COM对象工作。

否则,如果你只是想捕获文本输出,你可以尝试:

$Output = Start-Process -Wait -Path 'C:\Windows\system32\cscript.exe' -ArgumentList 'MyScript.vbs', '//B', '//NoLogo' 

或者:

Start-Process -Wait -OutVariable Output -Path 'C:\Windows\system32\cscript.exe' -ArgumentList 'MyScript.vbs', '//B', '//NoLogo' 
$Output 
+0

我试图按照您指定的方式从powershell运行它。但我没有将输出变量var1,var2&var3的值返回给powershell。它仍然是空白的。 – Arocks

+0

哦,他们是*输出*变量?在这种情况下,试试'$ objServiceLogon.DsGetDetails(“ABCSVC”,“ABCDE”,([ref] $ var1),([ref] $ var2),([ref] $ var3))''。 PowerShell默认使用按值传递。但是,我不知道这是否适用于COM对象。你真的可能需要调用VBScript。 –

+0

感谢您的回复。这没有奏效。所以我已经在vb脚本中写入了一个文件输出,并在powershell中调用了vb脚本,并将输出用于进一步处理。 – Arocks