Вам не нужно
while($true) {}
Просто напишите
[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
Function Pick-Date {
$Cal = New-Object System.Windows.Forms.MonthCalendar
$Cal.ShowWeekNumbers = $true
$Cal.MaxSelectionCount = 1
$Cal.Dock = 'Fill'
$Form = New-Object Windows.Forms.Form
$Form.text = "Colocar fecha que desea enviar. Y presiona Enter"
$Form.Size = New-Object Drawing.Size @(656,620)
$btnSelect = New-Object System.Windows.Forms.Button
$btnSelect.Size = "100,100"
$btnSelect.add_Click({ $Form.close() })
$btnSelect.Location = New-Object System.Drawing.Point(530,480)
$btnSelect.Text="ENTER"
$Form.Controls.Add($btnSelect )
$Form.AcceptButton = $btnSelect
$Form.Controls.Add($Cal)
$Form.Add_Shown({$Form.Activate()})
[void]$Form.ShowDialog()
return (Get-Date($Cal.SelectionStart))
}
$fecha = Pick-Date
write-host $fecha
Если вы не хотите, чтобы форма календаря открывалась даже тогда, когда пользователь нажал на кнопку ввода даты?Приведенная выше версия закрывается, когда пользователь нажимает кнопку выхода или когда пользователь вводит дату.