如何使用PowerShell和Windows窗体捕获文本框数据

问题描述:

我想使用PowerShell创建窗体窗体,然后操作输入的数据。我遇到的问题是,如果我将代码复制/粘贴到PowerShell窗口中,我可以使代码工作,但是如果将完全相同的代码保存到PS1文件中,我无法使其工作。我不明白这一点。如何使用PowerShell和Windows窗体捕获文本框数据

如果您尝试使用本文中的示例:http://technet.microsoft.com/en-us/library/ff730941.aspx将其粘贴到打开的命令提示符时,它将正常工作。如果您尝试将此代码保存为PS1并在PowerShell窗口中运行PS1,则在对话框中单击“确定”时,我什么都不会返回。

有人能帮我理解为什么它不能用作PS1文件吗?

谢谢,

斯蒂芬ħ

+0

这很有趣。我尝试过,但我的经历有点不同。无论哪种方式,行为都是一样的。在这两种情况下,似乎'$ x'没有被分配在字段中输入的字符串。但是,如果我回显'$ objTextBox.Text',那么它确实包含我输入的文本。出于某种原因,这个赋值'$ x = $ objTextBox.Text'似乎没有工作(范围问题?)。然而,对我而言,无论我是否使用脚本控制台,情况都是一样的。 – David 2014-10-31 23:26:57

变量赋值语句($x=$objTextBox.Text)设置默认范围,这是通过Local默认内的值。 由于赋值语句在{...}之内,变量值在赋值范围外不可见。

您可以通过改变赋值语句$x=$objTextBox.Text

$global:x=$objTextBox.Text 

更多信息:

+0

Thanks - This works - I appreciate the help – Satarian 2014-11-01 02:52:11

+0

在OP *引用的脚本中使用示例,我只是想知道,如果有多个输入(动态创建),如何在提交后检索用户输入的数据使用循环)? – 2017-01-04 12:21:50

由于马捷表示,这是一个范围的问题,他提供了一个exce能够处理子范围内的变量的流行解决方案。

我想提供一种解决此问题的替代方法。那就是在脚本的开头用New-Variable声明变量并使用-Option AllScope参数。例如,我将使用script that was referenced in the OP。在3线插入一行改为:

New-Variable -Name x -Option AllScope 

现在,当你运行任何你输入入禁区,因为变量$x在所有范围相一致的脚本,它将输出。

+0

谢谢 - 这个工程以及Metej的信息。我更喜欢这个想法,因为我可以提前将所有变量分配给以后使用。 – Satarian 2014-11-01 02:51:40

+0

使用* OP *引用的脚本中的示例,我只是想知道,如果有多个输入(使用循环动态创建),如何在提交后检索用户输入的数据? – 2017-01-04 12:21:06

+0

@IfediOkonkwo这是一个完全不同的问题。你应该为此创建一个新线程。这将涉及存储和检索数据,这是一个范围问题。 – TheMadTechnician 2017-01-04 21:03:38