PowerShell的窗口形成browes对话

我试图创build一个窗口,单击button时将显示一个文件夹/文件browes窗口,然后用户select文件/文件夹,然后单击确定,然后我可以使用选定的path作为另一个脚本的string。

问题是,当我通过PowerGUI(PowerShell脚本应用程序)运行它的工作正常,但是当我通过Windows PowerShell运行它挂载加载浏览对话框,任何人之前看到这个或看到什么是做错了或得到了替代,任何帮助将不胜感激。

cls $button = $browse = $form = 0 [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms") $browse = new-object system.windows.Forms.FolderBrowserDialog $browse.RootFolder = [System.Environment+SpecialFolder]'MyComputer' $browse.ShowNewFolderButton = $false $browse.selectedPath = "C:\" $browse.Description = "Choose a directory" $button1 = New-Object system.Windows.Forms.Button $button1.Text = "Choose Directory" $button1.Add_Click({$browse.ShowDialog()}) $button1.left = 20 $button1.top = 20 $form = New-Object system.windows.forms.Form $form.controls.add($button1) $form.ShowDialog() $form.Dispose() $browse.SelectedPath 

我的代码在我尝试时运行。 但是我注意到,有时(特别是第二次会话中),我使用的是一个浏览窗口,它隐藏在PowerShell控制台的后面,似乎卡住了。 那么你可以尝试移动你的PowerShell的控制台到一边,当它“挂起”?

此外,作为建议:如果您只使用表单来选择一个文件夹的位置,我会跳过它。 你不会收到浏览器的值,直到你关闭表单反正,所以尝试这样的事情,而不是:

 function Get-BrowseLocation { [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null [System.Windows.Forms.Application]::EnableVisualStyles() $browse = New-Object System.Windows.Forms.FolderBrowserDialog $browse.RootFolder = [System.Environment+SpecialFolder]'MyComputer' $browse.ShowNewFolderButton = $false $browse.Description = "Choose a directory" $loop = $true while($loop) { if ($browse.ShowDialog() -eq "OK") { $loop = $false } else { $res = [System.Windows.Forms.MessageBox]::Show("You clicked Cancel. Try again or exit script?", "Choose a directory", [System.Windows.Forms.MessageBoxButtons]::RetryCancel) if($res -eq "Cancel") { #End script return } } } $browse.SelectedPath $browse.Dispose() } PS > Get-BrowseLocation D:\ 

当我通过PowerShellPlus运行我的脚本(anther powershell编辑器)时,我遇到了类似的问题。 幸运的是,我发现这个帖子展示了如何在不使用FolderBrowserDialog的情况下提示输入文件夹。 下面是我使用的一组代码,这些代码是我编写的用于通过GUI提示用户输入多种不同类型的。

 # Show an Open Folder Dialog and return the directory selected by the user. function Read-FolderBrowserDialog([string]$Message, [string]$InitialDirectory) { $app = New-Object -ComObject Shell.Application $folder = $app.BrowseForFolder(0, $Message, 0, $InitialDirectory) if ($folder) { return $folder.Self.Path } else { return '' } } 

我认为你遇到了我遇到的问题, 这个问题已经解决了

答案建议设置.ShowHelp$true ,如下所示:

 $openFileDialog = New-Object System.Windows.Forms.openFileDialog $openFileDialog.ShowHelp = $true $openFileDialog.ShowDialog() | Out-Null 

如果您对Frode提供的功能进行了以下更改。 F,对话将永远到达顶部。

 $topform = New-Object System.Windows.Forms.Form $topform.Topmost = $true $topform.MinimizeBox = $true $loop = $true while($loop) { if ($browse.ShowDialog($topform) -eq "OK")