When I create a form (window) in PowerShell, I can usually display the form using .ShowDialog():
$form = New-Object System.Windows.Forms.Form
$form.ShowDialo
Avoid using Show() from PowerShell as it requires a message pump and that isn't something the PowerShell console provides on the thread that creates your form. ShowDialog() works because the OS does the message pumping during this modal call. Creating the form and calling ShowDialog() works reliably for me.
My problem: When using ShowDialog() as part of a powershell logon script, the first form window would not show and powershell would seem to freeze up on logon. Symptoms were simular to the original post.
Solution I found: Instead of using $form.showDialog(), use:
[System.Windows.Forms.Application]::Run($form)
Works great for me now, and only the first form in the series needed the change. All my other forms that come up afterwards in the script still use showDialog.