powershell 从作业中执行 visual basic 代码
powershell executing visual basic code from within jobs
我正在尝试将下面的代码作为作业启动,但我认为我没有在作业中正确初始化程序集。
下面的块是我想在 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)
如有任何帮助,将不胜感激!!
您的脚本需要更正:
- 您应该添加 System.Reflection 而不是 System.Reflection.Assembly
- MsgBox 的第二个参数应该用引号分隔 vb 选项,您不应该将
Information
和 Exclamation
混合用于 vb 对话框。
修改后的脚本如下:
$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)
它应该会提示您一个正确的 Exclamation 对话框。如果您想从第一个 powershell 两行中获得类似的对话框,则必须将 Exclamation
替换为 Information
。
编辑: 正如@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)
我正在尝试将下面的代码作为作业启动,但我认为我没有在作业中正确初始化程序集。
下面的块是我想在 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)
如有任何帮助,将不胜感激!!
您的脚本需要更正:
- 您应该添加 System.Reflection 而不是 System.Reflection.Assembly
- MsgBox 的第二个参数应该用引号分隔 vb 选项,您不应该将
Information
和Exclamation
混合用于 vb 对话框。
修改后的脚本如下:
$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)
它应该会提示您一个正确的 Exclamation 对话框。如果您想从第一个 powershell 两行中获得类似的对话框,则必须将 Exclamation
替换为 Information
。
编辑: 正如@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)