You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:03:15