如何使用 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.ps1
在 PowerShell ISE
中直接工作,因为默认情况下已经加载了正确的程序集,但在 powershell.exe
或 VSCode
.[=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
大家好,新年快乐。
我两天前才了解 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.ps1
在 PowerShell ISE
中直接工作,因为默认情况下已经加载了正确的程序集,但在 powershell.exe
或 VSCode
.[=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