如何使用 VBScript 调用带参数的 PowerShell 文件

How to call a PowerShell file with parameters using VBScript

大家好,新年快乐。

我两天前才了解 PowerShell,它显示了。我正在尝试制作自定义气球提示,但没有为每个可能的事件制作单独的 ps1 脚本。我需要的是带参数的ps1。

我在这个网站上找到了这段代码: GitHub Invoke-BalloonTip

我成功地从 PS window 中调用了它:

 . .\Invoke-BalloonTip.ps1
Invoke-BalloonTip -Message 'Message' -Title 'Title' -MessageType Info

但是,我需要从 VBScript 中调用它。我试过:

Set objShell = CreateObject("Wscript.shell")
objShell.run("powershell -command . c:\PowerShellTest\Invoke-BalloonTip.ps1" & Invoke-BalloonTip -Message 'Invoked' -Title 'Invoked' -MessageType Info)

Set objShell = CreateObject("Wscript.shell")
objShell.run("powershell -command ""& { . c:\PowerShellTest\Invoke-BalloonTip.ps1; Invoke-BalloonTip -Message 'Message' -Title 'Title' MessageType Info }""")

还有一些结果不尽如人意。这两个示例是唯一在 PS window 运行时未显示错误的示例。对于这两个示例,PS window 将短暂显示并且不显示任何错误消息,但不会显示气球提示。

我确定这是一个语法问题,但我不知道它可能是什么。欢迎和赞赏任何想法或建议。

我认为问题出在原始 Invoke-BalloonTip.ps1 上,因为它试图在可用之前使用 System.Windows.Forms.ToolTipIcon 类型(通过加载 System.Windows.Forms)。在你的命令中更早地添加它应该可以解决问题(尽管它看起来有点老套):

Set objShell = CreateObject("Wscript.shell")
objShell.run("powershell.exe -command ""& {Add-Type -AssemblyName System.Windows.Forms;. C:\PowerShellTest\Invoke-BalloonTip.ps1; Invoke-BalloonTip -Message ""Message"" -Title ""Title"" -MessageType Info}""")

Invoke-BalloonTip.ps1PowerShell ISE 中直接工作,因为默认情况下已经加载了正确的程序集,但在 powershell.exeVSCode.[=18= 中则不然]

为了遇到类似问题的其他人,如果您的消息或标题中有空格,这将不起作用。为了修复它,我用单引号将字符串括起来:

objShell.run("powershell.exe -command ""& {Add-Type -AssemblyName System.Windows.Forms;. C:\PowerShellTest\Invoke-BalloonTip.ps1; Invoke-BalloonTip -Message ""'Message with Space'"" -Title ""'Title With Space:'"" -MessageType info}""")

您可以使用此代码。

Dim strTitle, srtContext, strCommang

strTitle = "Title"
srtContext = "Text"

strCommang =    "powershell.exe -executionpolicy bypass -command " & _
                "[reflection.assembly]::loadwithpartialname('System.Windows.Forms')" & vbNewLine & _
                "[reflection.assembly]::loadwithpartialname('System.Drawing')" & vbNewLine & _
                "$notify = new-object system.windows.forms.notifyicon" & vbNewLine & _
                "$notify.icon = [System.Drawing.SystemIcons]::Information" & vbNewLine & _
                "$notify.visible = $true" & vbNewLine & _
                "$notify.showballoontip(10,'" & strTitle & "','" & srtContext & "',[system.windows.forms.tooltipicon]::None)"

Set objShell = CreateObject("Wscript.shell")
objShell.Run strCommang, 0
Set objShell = Nothing