PowerShell — нажатие кнопки формы выводит переменную за пределы закрывающих скобок

#powershell

#powershell

Вопрос:

Я пытаюсь создать игру в блэкджек в PowerShell с единственной целью изучения языка.

Не я начал тестирование с помощью forms (чтобы выбрать hit / stand) и обнаружил следующую проблему в тестовом файле формы:

 [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null

$Form = New-Object system.Windows.Forms.Form
$Form.Text = "Debug."
$Form.AutoScroll = $True
$Form.AutoSize = $True
$Form.AutoSizeMode = "GrowAndShrink"
$Form.BackColor = "Red"
# $Form.Icon = [system.drawing.icon]::ExtractAssociatedIcon("C:ScriptsPrivateSVTserv.ico") ### Commented out because other people don't have this file.
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Form.WindowState = "Normal"
$Form.SizeGripStyle = "Hide"
$Form.ShowInTaskbar = $False
$Form.Opacity = 0.7
$Form.StartPosition = "CenterScreen"
$Label = New-Object System.Windows.Forms.Label
$Label.Text = "Debug, trigger: @Null."
$Label.AutoSize = $True
$Form.Controls.Add($Label)


$HButton = New-Object System.Windows.Forms.Button
$HButton.Location = New-Object System.Drawing.Size(75,120)
$HButton.Size = New-Object System.Drawing.Size(75,23)
$HButton.Text = "Debug1"
$HButton.Add_Click({
$X = "DATA.DEBUG.1"
Write-Host $X - test1.
$Form.Close()
Write-Host $X - test2.
}
)
Write-Host $X - test3.
$Form.Controls.Add($HButton)

$SButton = New-Object System.Windows.Forms.Button
$SButton.Location = New-Object System.Drawing.Size(150,120)
$SButton.Size = New-Object System.Drawing.Size(75,23)
$SButton.Text = "Debug2"
$SButton.Add_Click({
$X = "DATA.DEBUG.2"
Write-Host $X - test1.
$Form.Close()
Write-Host $X - test2.
}
)
$Form.Controls.Add($SButton)

$Form.ShowDialog() | Out-Null
Write-Host $X - test4.    
  

Нажатие кнопки Debug1 возвращает следующий вывод:

  - test3.
DATA.DEBUG.1 - test1.
DATA.DEBUG.1 - test2.
 - test4.
  

То, что я пытаюсь здесь сделать, это установить переменную $ X и повторно использовать ее позже, мне нужно использовать ее в разделе, где она записывает выходные данные как test4.

Другая полезная информация может быть моей версией PowerShell:

 PS C:WindowsSystem32WindowsPowerShellv1.0> Write-Host $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1      
  

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

1. Я не уверен, в чем проблема, можете ли вы уточнить? Что вы хотите, чтобы произошло?

2. Переменная @Raf $ X не записывается там, где запускается строка «Write-Host $X — test4.». Для проверки выходных данных, которые я предоставил.

Ответ №1:

Вы можете создать $X глобальную переменную — заменить все экземпляры $X на $global:X .

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

1. Это сработало, спасибо. Полезно знать, что powershell использует глобальные переменные. В любом случае, будут ли эти переменные $Global: сохранены для использования и в других представлениях?

2. Вы можете узнать больше о областях здесь: technet.microsoft.com/en-gb/library/hh847849.aspx