как передать ввод текстового поля Windows forms в функцию модуля powershell

#powershell #powershell-module

#powershell #powershell-модуль

Вопрос:

Ниже приводится абстрактное представление о том, что я пытаюсь сделать; все эти сценарии находятся в одной папке

 # Windows Form script called gui.ps1

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

$Form = New-Object system.Windows.Forms.Form
$Form.ClientSize = New-Object System.Drawing.Point(891, 414)
$Form.text = "Form"
$Form.TopMost = $false

$Label1 = New-Object system.Windows.Forms.Label
$Label1.text = "Enter the Text : "
$Label1.AutoSize = $true
$Label1.width = 25
$Label1.height = 10
$Label1.location = New-Object System.Drawing.Point(39, 188)
$Label1.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 10)

$text_box = New-Object system.Windows.Forms.TextBox
$text_box.multiline = $false
$text_box.width = 695
$text_box.height = 20
$text_box.location = New-Object System.Drawing.Point(144, 183)
$text_box.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 10)

$Button1 = New-Object system.Windows.Forms.Button
$Button1.text = "Submit"
$Button1.width = 106
$Button1.height = 30
$Button1.location = New-Object System.Drawing.Point(386, 239)
$Button1.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 10)

$Form.controls.AddRange(@($Label1, $text_box, $Button1))

$Button1.Add_Click({ txtInput })           # txtInput is defined in module.
 
 # module called demo.psm1 

function txtInput
{
    $txt = $text_box.Text
    Write-Host $txt
}
 
 # execute.ps1

Import-Module -Name $PSScriptRootdemo.psm1

Set-Location $PSScriptRoot

. .gui.ps1        # dot sourcing

[void]$Form.ShowDialog()
 

Когда я запускаю скрипт execute.ps1, отображается форма. Но когда я нажимаю кнопку 1, ввод текстового поля не отображается в powershell.
Попытался определить переменную ‘txt’ в модуле как $ global: txt = $text_box.Text. Это не сработало.

Как я могу заставить это работать?

Комментарии:

1. уберите пробел перед открывающей скобкой: $Button1.Add_Click({..})

2. сделал это. не работает.

3. Вы получаете сообщение об ошибке? Вы что-нибудь изменили в demo.psm1 и не перезапускали PowerShell?

4. сообщения об ошибках не были показаны. когда я запускаю скрипт, появляется графический интерфейс, и я ввел несколько текстов в поле и нажал кнопку отправки. но в консоли powershell ничего не отображается. предполагается, что функция в модуле принимает ввод из текстового поля и отображает его при нажатии кнопки отправки.