2012-07-10 106 views

回答

10

也许这个剧本是你想要什么:

Function Select-FolderDialog 
{ 
    param([string]$Description="Select Folder",[string]$RootFolder="Desktop") 

[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | 
    Out-Null  

    $objForm = New-Object System.Windows.Forms.FolderBrowserDialog 
     $objForm.Rootfolder = $RootFolder 
     $objForm.Description = $Description 
     $Show = $objForm.ShowDialog() 
     If ($Show -eq "OK") 
     { 
      Return $objForm.SelectedPath 
     } 
     Else 
     { 
      Write-Error "Operation cancelled by user." 
     } 
    } 

用途为:

$folder = Select-FolderDialog # the variable contains user folder selection 
+0

您需要在param块之后移动程序集加载。 – 2012-07-10 12:16:41

+0

@ShayLevy谢谢!现在修复。 – 2012-07-10 12:41:16

+0

完美的工作,谢谢 – naveejr 2012-07-12 03:54:59

1

以上没有为我工作。运行Windows 7使用PowerShell第2版。 我确实发现以下,这也允许弹出和选择:

Function Select-FolderDialog 
    { 
     param([string]$Description="Select Folder",[string]$RootFolder="Desktop") 

    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") Out-Null  

    $objForm = New-Object System.Windows.Forms.FolderBrowserDialog 
    $objForm.Rootfolder = $RootFolder 
    $objForm.Description = $Description 
    $Show = $objForm.ShowDialog() 
    If ($Show -eq "OK") 
    { 
     Return $objForm.SelectedPath 
    } 
    Else 
    { 
     Write-Error "Operation cancelled by user." 
    } 
    } 

万一别人有同样的问题。

+1

工程,但有时有没有显示前面的对话的问题。 – Baodad 2013-08-08 01:19:39

0

只是想后的增编,我相信这是在两者之间缺少一个管|

[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

和:

Out-Null 
+0

缺少哪个答案/代码片段?据我所知,至少在被接受的答案中有一条管道。 – 2017-05-30 22:50:34

相关问题