【发布时间】:2019-10-24 11:35:00
【问题描述】:
我正在尝试从 PowerShell 开发一个表单来控制和监视脚本的执行(在我的例子中是 VBScript,但它可以是任何其他的)并从中获取一些值。
我是 PowerShell 新手,因此我对代码结构表示歉意。英语不是我的母语,所以我也为任何错误道歉。我还发布了另一个与此program development相关的问题
我正在使用 PowerShell,因为我希望我的表单在 Windows 通知任务栏中有一个图标和一个菜单。在这个阶段,我唯一拥有的是图标,但我也会有一个菜单。这不是问题。
我需要我的表单,在单击按钮后,启动一个以结果(整数或字符串)结尾的 VBScript,然后将该结果分配给 PowerShell 变量。但我得到的是长句在所需输出的值之前具有 PowerShell 版权。
有谁知道我该如何解决我的问题?主要目的是将 VBScript 的结果放入 PowerShell 变量中...
作为测试,我尝试使用我的 PowerShell 程序启动的 VBScript 是一个简单的变量分配,我称之为 hello.vbs:
Master_Variable = 222
WScript.Echo Master_Variable
为此,我创建了 3 个代码文件。它以调用 PowerShell 命令的名为“program.vbs”的 VBScript 开始:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\Users\XXX\Desktop\Program\program.bat" & Chr(34), 0
Set WshShell = Nothing
其次,它执行一个名为 program.bat 的批处理文件,该文件调用 PowerShell 脚本:
powershell -executionpolicy bypass -file "C:\Users\XXX\Desktop\Program\program.ps1"
最后,名为program.ps1 的主脚本创建了带有控制和监控指令的表单:
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$Form = New-Object System.Windows.Forms.Form
$Label1 = New-Object System.Windows.Forms.Label
$ComButt1 = New-Object System.Windows.Forms.Button
$Form.Text = "Application"
$Form.Controls.Add($Label1)
$Form.Controls.Add($ComButt1)
$Form.Width = 1260
$Form.Height = 120
$Form.FormBorderStyle = "FixedSingle"
$Form.MaximizeBox = $False
$Form.StartPosition = "CenterScreen"
$Label1.Text = "Value of vbs variable: "
$Label1.Left = 30
$Label1.Top = 20
$Label1.AutoSize = $True
$ComButt1.Text = "Read VBScript"
$ComButt1.Left = 12
$ComButt1.Top = 40
$ComButt1.Width = 102
$ComButt1.Add_Click({
$answer = cscript /nologo "C:\Users\u36557\Desktop\Programita\hello.vbs"
$Label1.Text = $Label1.Text + $answer
})
$Form.ShowDialog()
【问题讨论】:
-
您是否尝试在某种科学怪人脚本中结合尽可能多的语言和技术?我不明白为什么你有一个执行 .bat 的 .vbs,它执行一个调用 .vbs 的 .ps
-
XXXXD 我的意图是启动一个 vbs 来启动一个 Windows.Form 并在 Windows 通知任务栏中进行控制。我发现这样做的唯一方法是使用 PowerShell,而我发现从 VBScript 调用 PowerShell 的唯一方法是使用 bat 文件 XDDD。最后,我需要在 PowerShell 运行时从 Outlook 读取一些参数,因此我需要再次调用 VBScript XXXDD(你的评论让我大笑)。如果有任何其他方式可以做到这一点,我愿意接受新的想法
-
好的。我找到了解决方案stackoverflow.com/a/1437444/7787606
-
我很确定您可以通过直接从 vbscript 执行 .ps 轻松绕过 .bat 文件。
标签: powershell vbscript