2017-04-19 65 views
0

當我運行這段代碼時,您會看到第一個寫入主機將顯示今天的日期,但最後2個將顯示默認日期。有誰知道爲什麼?Powershell日期GUI奇怪的行爲

代碼來自微軟,所以我很困惑,爲什麼它不會工作? https://technet.microsoft.com/en-us/library/ff730942.aspx

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 

[DateTime] $dtmDate = New-Object DateTime; 
[string] $dt = ""; 
$objForm = New-Object Windows.Forms.Form 

$objForm.Text = "Select a Date, then press the enter key" 
$objForm.Size = New-Object Drawing.Size @(350,190) 
$objForm.StartPosition = "CenterScreen" 

$objForm.KeyPreview = $True 


$objForm.Add_KeyDown({ 
    if ($_.KeyCode -eq "Enter") 
     { 
      $dtmDate = $objCalendar.SelectionStart 
      #$dt = $objCalendar.SelectionStart.ToShortDateString(); 
      Write-Host $dtmDate; 
      $objForm.Close() 
     } 
    }) 

$objForm.Add_KeyDown({ 
    if ($_.KeyCode -eq "Escape") 
     { 
      $objForm.Close() 
     } 
    }) 

$objCalendar = New-Object System.Windows.Forms.MonthCalendar 
$objCalendar.ShowTodayCircle = $False 
$objCalendar.MaxSelectionCount = 1 
$objForm.Controls.Add($objCalendar) 

$objForm.Topmost = $True 

$objForm.Add_Shown({$objForm.Activate()}) 
[void] $objForm.ShowDialog() 

Write-Host "Date selected: $dtmDate" 
if ($dtmDate) 
    { 
     Write-Host "Date selected: $dtmDate" 
    } 

回答

0

變化$dtmDate$global:dtmDate

原因是您在事件觸發時分配值,因此僅在本地聲明和初始化該事件。在事件之外,變量只被聲明。通過使用$global您正在更改範圍如果變量爲所有腳本。

順便說一句。永遠不要相信微軟文檔