#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