2016-07-29 2 views
1

Почему код ниже возвращает дату в силовой оболочке 2, но не в Powers hell 3 Я предполагаю, что это связано с тем, что переменная $ dtmDate очищается после завершения объекта формы. но как мне его вернуть, чтобы его использовали?Powershell 2 works 3 is not

Приветствия

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

$objForm = New-Object Windows.Forms.Form 

$objForm.Text = "Select a Date" 
$objForm.Size = New-Object Drawing.Size @(190,190) 
$objForm.StartPosition = "CenterScreen" 

$objForm.KeyPreview = $True 

$objForm.Add_KeyDown({ 
    if ($_.KeyCode -eq "Enter") 
     { 
      $dtmDate=$objCalendar.SelectionStart 
      $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() 

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

'$ global: dtmDate = $ objCalendar.SelectionStart'. (Нет, я не знаю точных правил съемки, или если что-то изменилось между 2 и 3.) –

+0

На самом деле, очень странно, что опубликованный код работал в PS2. – wOxxOm

+1

@JeroenMostert Да, «что-то» изменилось между 2 и 3 (3.0+ работает на .NET DLR), и оно повлияло на правила области действия событий. –

ответ

-1

Изменение сферы $ dtmDate = $ objCalendar.SelectionStart к в сценарии/глобальный делает код для работы на PS v3 хозяина.

$script:dtmDate=$objCalendar.SelectionStart 
+0

Увидев, что это было опубликовано за 2 часа до этого кем-то другим, вряд ли кажется справедливым, если я принимаю его как ответ. – DevilWAH