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 范围也会产生挥之不去的副作用,因此在使用此范围级别时要小心。