PowerShell文件浏览器对话框设置.ps1过滤后仍显示快捷方式文件的问题求助
PowerShell文件浏览器对话框设置.ps1过滤后仍显示快捷方式文件的问题求助
嘿,我来帮你解决这个小麻烦!先把你的问题场景再梳理一遍:
我运行以下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文件)
- MAIL.docx(指向上述Word文件的.lnk快捷方式)
但文件浏览器对话框显示的可选文件是:
- a.ps1
- MAIL.docx(指向Word文件的.lnk快捷方式)
我哪里做错了?我期望只看到
a.ps1。
问题根源
这个问题的原因在于Windows Forms的OpenFileDialog控件默认会自动解析快捷方式(.lnk文件)——它会把快捷方式当成指向的目标文件来处理,再加上系统默认隐藏了.lnk扩展名,就导致这个指向Word文档的快捷方式意外出现在了你的可选列表里。
解决方法
你只需要在代码里添加一行,禁用快捷方式的解引用功能,这样对话框就只会根据文件本身的扩展名来匹配过滤器,不会再把快捷方式当成目标文件看待了。修改后的代码如下:
Add-Type -AssemblyName System.Windows.Forms $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog $FileBrowser.InitialDirectory = "c:\temp" $FileBrowser.Filter = "Files ps1(*.ps1)|*.ps1" # 禁用快捷方式解引用,只识别文件本身的扩展名 $FileBrowser.DereferenceLinks = $false [void]$FileBrowser.ShowDialog()
这样修改之后,文件选择对话框就只会显示真正的.ps1文件(也就是你的a.ps1),那个指向Word文档的快捷方式就不会再出现啦!
备注:内容来源于stack exchange,提问作者RPO
相关产品推荐
相关产品推荐

