Get-ChildItem脚本执行遇权限拒绝问题求助
解决PowerShell统计C盘.bat/.cmd文件时的权限拒绝问题
我来帮你搞定这个问题!你遇到的情况很典型,咱们一步步拆解分析:
首先,你原脚本的问题出在**-Include参数和根目录路径的搭配逻辑**上,再加上权限限制的触发条件差异,导致单独统计.bat正常,加.cmd就报错。
直接可用的修复脚本
方案1:修正路径写法,让-Include正确递归匹配
把路径从C:\改成C:\*,这样-Include才能正确应用到所有子目录的文件上,同时保留错误抑制:
Get-ChildItem -Path C:\* -Include *.bat,*.cmd -Recurse -ErrorAction SilentlyContinue | Measure-Object | Select-Object Count
方案2:分两次查询合并结果(性能更优)
用-Filter分别统计两种文件再相加,-Filter比-Include效率更高,也能避免一些遍历逻辑的坑:
$batCount = (Get-ChildItem -Path C:\ -Filter *.bat -Recurse -ErrorAction SilentlyContinue).Count $cmdCount = (Get-ChildItem -Path C:\ -Filter *.cmd -Recurse -ErrorAction SilentlyContinue).Count $totalCount = $batCount + $cmdCount $totalCount
为什么会出现这个问题?
-Include的路径匹配逻辑:当你用Get-ChildItem -Path C:\ -Include ... -Recurse时,-Include默认只会匹配根目录C:\下的文件,而非所有子目录。加上*后(C:\*),PowerShell才会将匹配规则应用到所有子目录的内容上。- 权限触发差异:单独统计
.bat时,脚本可能没遍历到那些你没有权限访问的系统保护目录(比如C:\Windows\System32下的某些子文件夹);但同时统计.cmd时,遍历逻辑会触及这些目录,触发权限拒绝——而原路径写法导致-ErrorAction SilentlyContinue没有完全抑制这些错误。
如果还是不行,你可以试试以管理员身份运行PowerShell,但上面的脚本修改应该已经能解决问题啦。
内容的提问来源于stack exchange,提问作者user5945815
相关产品推荐
相关产品推荐

