PowerShell 7.5.0:存测试结果到变量再判断与直接在IF调用哪个更高效?
问题:Test-Path存变量还是直接在If语句中调用更高效?
我想知道在以下PowerShell场景中,哪种写法执行效率更高:是把Test-Path的结果存入变量后再用于If判断,还是直接在If语句里调用Test-Path?
当前代码片段:
$pathExists = Test-Path $Path $hiberbootEnabled = (Get-ItemPropertyValue $Path -Name $Name) -ne $value If (!$pathExists -or $hiberbootEnabled){ Exit 1 } else { Exit 0 }
两种写法都能正常运行,我不太在意可读性,更关注脚本执行效率。运行环境是PowerShell 7.5.0。
补充:求推荐好用的VS Code脚本运行时长追踪扩展。
回答
关于执行效率
两种写法的执行效率几乎没有差异,原因如下:
- 你当前的代码中,
Test-Path只被调用一次,结果存入变量后再用于判断。 - 如果改成直接在If语句中调用(比如
If (!(Test-Path $Path) -or $hiberbootEnabled)),Test-Path同样只会执行一次——因为PowerShell的-or运算符是短路求值:当第一个条件(!(Test-Path $Path))为真时,会直接跳过第二个条件的判断,不会重复调用Test-Path。
只有当你在多个代码分支中重复调用Test-Path时,把结果存入变量才会体现出效率优势(避免重复执行文件系统检查),但在你当前的场景里,两种方式的性能差异可以完全忽略。
VS Code扩展推荐
- PowerShell Profiler:专门针对PowerShell脚本的性能分析工具,能追踪每个命令的执行时长、调用次数,帮你精准定位耗时环节。
- Code Runner:除了快速运行各类脚本,还会在输出面板显示脚本的总执行时长,操作简单,适合快速测试小段代码的运行时间。
内容的提问来源于stack exchange,提问作者Davey
相关产品推荐
相关产品推荐

