2016-07-29 5 views
1

以下のコードはPowerシェル2では日付を返しますが、Powers hellでは返しません3フォームオブジェクトが終了すると変数$ dtmDateをクリアしていると仮定します。どのように私はそれを使用するために戻って持っている?Powershell 2 works 3 does 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

'$グローバル:dtmDate = $ objCalendar.SelectionStart'。 (いいえ、正確なスコープルールがわからない、または2と3の間で変更されたものがある場合) –

+0

実際には、投稿されたコードがPS2で機能するのは非常に奇妙です。 – wOxxOm

+1

@ JeroenMostertはい、「何か」が2と3の間で変更されました(.NET DLRで3.0+が実行されました)、イベントアクションのスコープルールに影響しました –

答えて

-1

グローバル・スクリプト/ ATに$ dtmDate = $ objCalendar.SelectionStartの範囲を変更するコードは、PS v3のホスト上で動作するようになります。

$script:dtmDate=$objCalendar.SelectionStart 
+0

これは、2時間前に投稿されました。 – DevilWAH