在Powershell中使用FolderBrowserDialog - 返回错误的数据

时间:2016-08-05 17:47:04

标签: powershell folderbrowserdialog

我看过帖子"如何在Powershell中正确使用FolderBrowserDialog"

我遇到的问题只是选择从函数返回的路径。

在脚本的最后我写了主持人$ a"但我没有得到我选择的目录(C:\ Temp) System.Windows.Forms,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 C:\ Temp

函数Get-Folder($ initialDirectory)

{     [System.Reflection.Assembly] :: LoadWithPartialName(" System.Windows.Forms的&#34)

$foldername = New-Object System.Windows.Forms.FolderBrowserDialog
$foldername.rootfolder = "MyComputer"

if($foldername.ShowDialog() -eq "OK")
{
    $folder += $foldername.SelectedPath
}
return $folder

}

$ a =获取文件夹 写主机$ a

我被告知这已经过时并且使用Add-Type。没有得到以下脚本的路径。

   Add-Type -AssemblyName System.Windows.Forms
   $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
   [void]$FolderBrowser.ShowDialog()
   $FolderBrowser.SelectedPath
   Write-Host "FolderBrowser= "$FolderBrowser

1 个答案:

答案 0 :(得分:2)

你得到的结果是因为这一行也产生了输出:

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

PowerShell返回函数的所有输出,因此您的结果实际上是一个数组,其中包含加载程序集和文件夹名称的输出。

在这样的程序集加载操作之前添加[void]将省略额外的输出并为您提供您期望的结果:

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

或者正如Anthony Stringer在评论中提到的那样,你可以使用Add-Type而不会产生任何输出,并且可能是首选的方法:

Add-Type -AssemblyName System.Windows.Forms

另外,TheMadTechnician是正确的,你不需要+ =,只需要= $的$ folder变量。

这个answer更详细地解释了从PowerShell函数返回输出的行为。