我看过帖子"如何在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
答案 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函数返回输出的行为。