我运行以下 powershell 脚本来选择 .ps1 文件:
Add-Type -AssemblyName System.Windows.Forms
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog
$FileBrowser.InitialDirectory = "c:\temp"
$FileBrowser.Filter = "Files ps1(*.ps1)|*.ps1"
[void]$FileBrowser.ShowDialog()
尽管有过滤器,快捷方式文件仍包含在选择中。 我的文件夹包含以下文件:
a.ps1
cdr.accdb
CDR_RETOURS_70.accdb
MAIL.docx --> word file
MAIL.docx --> .lnk shortcut to the MAIL.docx word file
文件浏览器对话框提供:
a.ps1
MAIL.docx (the .lnk shortcut to the MAIL.docx word file)
我做错了什么? 谢谢你
我预计只会得到 a.ps1
快捷方式文件是由 shell 处理的“特殊”Windows 文件 - 确切的行为有点不透明。因此,像
OpenFileDialog
这样的常见控件都知道这种行为,并且不能轻易更改它(您可能可以使用一些内联 c#,但这变得越来越复杂)。
据我所知,与 Lnk 文件相关的唯一选项是
$FileBrowser.DereferenceLinks = $true
- 如果选择了 lnk 文件,这将导致 OpenFileDialog 返回链接目标而不是 .lnk 文件本身 - 但它不会阻止 .lnk文件被显示或选择。
奇怪的是,如果您创建一个具有随机文件扩展名且未注册到应用程序的空白文件,这些 lnk 文件将被过滤掉。我认为您面临着 Windows 本身不一致的行为,并且我认为您无法通过纯 PowerShell 对此做太多事情。