PowerShell为何不对无效属性报错?我的代码未触发异常的疑问
为什么访问不存在的
LastAccessed属性没有报错? 你的代码没报错是因为PowerShell的两个核心特性:
访问不存在的属性默认返回
$null而非错误
PowerShell中,尝试访问对象不存在的属性时不会直接抛出异常,而是返回$null。所以$_.lastaccessed实际得到的是$null,这个值会参与后续的比较逻辑,但不会触发命令级别的错误。-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
相关产品推荐
相关产品推荐

