Powershell:不要刷新存储在变量中的获取日期
Powershell: Do not refresh Get-Date stored in variable
这可能很简单,但我想不通。
我正在获取系统日期并将其存储到一个变量中,然后在单击按钮的当天减去 1。问题是,cmdlet 会在每次单击时刷新,并且不会继续递减。因此,如果今天是 21 号,则单击按钮将输出 20,然后如果我再次单击它应该输出 19,但它始终输出 20。
[int] $myDD = (Get-Date -Format dd)
button1_click= {
$myDD = $myDD - 1
write-host $myDD
}
完整代码
[int] $myDD = (Get-Date -Format dd)
function Create-Form {
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form1 = New-Object System.Windows.Forms.Form
$button4 = New-Object System.Windows.Forms.Button
#################################
# CLICKS #
#################################
$button4_Click= {
$myDD = $myDD - 1
write-host $myDD
}
$OnLoadForm_StateCorrection={
$form1.WindowState = $InitialFormWindowState
}
#################################
# FORM #
#################################
$form1.Text = "Test"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 280
$System_Drawing_Size.Height = 100
$form1.ClientSize = $System_Drawing_Size
#################################
# BUTTONS #
#################################
#button4
$button4.TabIndex = 4
$button4.Name = "button4"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 20
$System_Drawing_Size.Height = 15
$button4.Size = $System_Drawing_Size
$button4.UseVisualStyleBackColor = $True
$button4.Text = "<<"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 245
$System_Drawing_Point.Y = 10
$button4.Location = $System_Drawing_Point
$button4.DataBindings.DefaultDataSourceUpdateMode = 0
$button4.Font = New-Object System.Drawing.Font("Lucida Console",12)
$button4.TextAlign.ContentAlignment.TopLeft
$button4.add_Click($button4_Click)
$form1.Controls.Add($button4)
<#-------------------------------#>
$InitialFormWindowState = $form1.WindowState
$form1.add_Load($OnLoadForm_StateCorrection)
$form1.ShowDialog()| Out-Null
}
Create-Form
显示完整代码后,您似乎可以执行以下操作:
button1_click= {
$script:myDD--
write-host $myDD
}
它在 Script 范围内递减变量。您可以查看 about_scopes
了解更多信息。
注意: 这里的最佳实践是使用 Script 级别范围和 $script:myDD--
,因为变量是在脚本的作用域是 运行ning。即使在脚本具有 运行 之后,使用 Global 范围也会产生挥之不去的副作用,因此在使用此范围级别时要小心。
这可能很简单,但我想不通。
我正在获取系统日期并将其存储到一个变量中,然后在单击按钮的当天减去 1。问题是,cmdlet 会在每次单击时刷新,并且不会继续递减。因此,如果今天是 21 号,则单击按钮将输出 20,然后如果我再次单击它应该输出 19,但它始终输出 20。
[int] $myDD = (Get-Date -Format dd)
button1_click= {
$myDD = $myDD - 1
write-host $myDD
}
完整代码
[int] $myDD = (Get-Date -Format dd)
function Create-Form {
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form1 = New-Object System.Windows.Forms.Form
$button4 = New-Object System.Windows.Forms.Button
#################################
# CLICKS #
#################################
$button4_Click= {
$myDD = $myDD - 1
write-host $myDD
}
$OnLoadForm_StateCorrection={
$form1.WindowState = $InitialFormWindowState
}
#################################
# FORM #
#################################
$form1.Text = "Test"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 280
$System_Drawing_Size.Height = 100
$form1.ClientSize = $System_Drawing_Size
#################################
# BUTTONS #
#################################
#button4
$button4.TabIndex = 4
$button4.Name = "button4"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 20
$System_Drawing_Size.Height = 15
$button4.Size = $System_Drawing_Size
$button4.UseVisualStyleBackColor = $True
$button4.Text = "<<"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 245
$System_Drawing_Point.Y = 10
$button4.Location = $System_Drawing_Point
$button4.DataBindings.DefaultDataSourceUpdateMode = 0
$button4.Font = New-Object System.Drawing.Font("Lucida Console",12)
$button4.TextAlign.ContentAlignment.TopLeft
$button4.add_Click($button4_Click)
$form1.Controls.Add($button4)
<#-------------------------------#>
$InitialFormWindowState = $form1.WindowState
$form1.add_Load($OnLoadForm_StateCorrection)
$form1.ShowDialog()| Out-Null
}
Create-Form
显示完整代码后,您似乎可以执行以下操作:
button1_click= {
$script:myDD--
write-host $myDD
}
它在 Script 范围内递减变量。您可以查看 about_scopes
了解更多信息。
注意: 这里的最佳实践是使用 Script 级别范围和 $script:myDD--
,因为变量是在脚本的作用域是 运行ning。即使在脚本具有 运行 之后,使用 Global 范围也会产生挥之不去的副作用,因此在使用此范围级别时要小心。