首页 > 解决方案 > powershell 从作业中执行 Visual Basic 代码

问题描述

我试图将下面的代码作为一项工作启动,但我认为我没有在工作中正确初始化程序集。

下面的块是我想在 powershell 的作业中执行的

[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic") 
[Microsoft.VisualBasic.Interaction]::MsgBox("DART Report completed.", "okonly,MsgBoxSetForeground,Information,DefaultButton2", "Report")

这是我试图执行一个类似的代码块,当它完成时,它似乎给了我一个 powershell 弹出窗口,不像上面的代码块。

$script:job = Start-Job -ScriptBlock {param($HostName, $username)
Add-Type -AssemblyName System.Windows.Forms, System.Reflection.Assembly, Microsoft.VisualBasic
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic") 
[Microsoft.VisualBasic.Interaction]::MsgBox("Report completed.", "okonly + vbExclamation,MsgBoxSetForeground,Information,DefaultButton2", "DART Report")} -ArgumentList ($HostName, $username)

任何帮助将不胜感激谢谢!!

标签: powershelljobs

解决方案


您的脚本需要一些更正:

  1. 您应该添加 System.Reflection 而不是 System.Reflection.Assembly
  2. MsgBox 的第二个参数应该是引号分隔的 vb 选项,您不应该混合Information使用Exclamationvb DialogBox。

这是修正后的脚本:

$script:job = Start-Job -ScriptBlock {param($HostName, $username)
Add-Type -AssemblyName System.Windows.Forms, System.Reflection, Microsoft.VisualBasic
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::MsgBox("Report completed.", "okonly,MsgBoxSetForeground,Exclamation,DefaultButton2", "DART Report")} -ArgumentList  ($HostName, $username)

它应该会提示您正确的感叹号对话框。如果您想从第一个 powershell 两行中获得类似的 Dialog,则必须替换ExclamationInformation.

编辑:正如评论中的@mklement0 所述,[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")您的脚本中不需要。System.Reflection和类型在逻辑上也是相同的System.Windows.Forms,即使您想稍后使用反射。

这是修改后的相应脚本:

$script:job = Start-Job -ScriptBlock {param($HostName, $username)
Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.Interaction]::MsgBox("Report completed.", "okonly,MsgBoxSetForeground,Exclamation,DefaultButton2", "DART Report")} -ArgumentList  ($HostName, $username)

推荐阅读