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

PowerShell为何不对无效属性报错?我的代码未触发异常的疑问

为什么访问不存在的LastAccessed属性没有报错?

你的代码没报错是因为PowerShell的两个核心特性:

  1. 访问不存在的属性默认返回$null而非错误
    PowerShell中,尝试访问对象不存在的属性时不会直接抛出异常,而是返回$null。所以$_.lastaccessed实际得到的是$null,这个值会参与后续的比较逻辑,但不会触发命令级别的错误。

  2. -ErrorAction Stop仅捕获命令本身的执行错误
    你添加的-ErrorAction Stop只对Get-ChildItem和Where-Object这两个命令本身的错误生效(比如路径不存在、权限不足等),而表达式内部的属性访问行为不属于命令错误范畴,因此不会触发catch块。

验证与修正

如果你想让访问不存在的属性时触发错误,可以开启PowerShell严格模式:

Set-StrictMode -Version Latest
try{    
    Get-ChildItem | Where-Object { -not $_.PsIsContainer -and $_.lastaccessed -lt $date} -ErrorAction stop  
    Write-Host "hello:"  
}
catch{  
    Write-Host $_  
}  

开启严格模式后,访问不存在的属性会直接抛出PropertyNotFoundException,此时catch块就能捕获到错误。

另外需要注意:Get-ChildItem输出的FileInfo对象实际存在的属性是LastAccessTime(注意完整名称和大小写),而非lastaccessed。如果你的需求是筛选最后访问时间早于指定日期的文件,应该使用$_.LastAccessTime。

内容的提问来源于stack exchange,提问作者TheGameiswar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:28:10