【发布时间】:2014-09-11 15:33:53
【问题描述】:
我有 powershell 代码
$target_dir = "\\server\share\"
$DelTmpStatus = "init value"
if ( Test-Path ( $target_dir + "receivals.tmp") )
{
del ( $target_dir + "receivals.tmp")
$DelTmpStatus = "Present and delete status $?"
} else {
$DelTmpStatus = "NA"
}
有时它会在 $DelTmpStatus 仍设置为“初始值”的情况下通过此部分。
if-else 结构如何不遵循任何一条路径?当if函数给出错误而不是true或false时,powershell中的if-else结构是否不做任何事情?
$PSVersionTable.psversion 是 3.0
编辑:当我自己运行它时,我从来没有任何错误或这个问题,无论是完全还是逐步。但有时计划的作业会运行并且 $DelTmpStatus 仍将是“初始化值”我想它会发生在 \\server\share\ 路径不可用时,因为服务器在一夜之间处于低功耗模式,响应时间过长并且测试路径功能超时.虽然我不能确定这是否是原因。
编辑:测试结果
- 为
$target_dir使用不存在的服务器使其遵循else 路径并将$DelTmpStatus设置为“NA” - 使用像
$target_dir = "C:\..\..\invalid\"这样的无效路径会导致 test-path 将错误写入 stderr 并返回 true(不理想,但无论如何),使程序继续尝试删除文件(再次出现错误)然后它将$DelTmpStatus设置为“呈现并删除状态 False”。这不是一件特别有用的事情,但至少执行了 if-else 语句中的代码。
【问题讨论】:
-
您是否遇到任何错误?尝试设置断点,继续执行,看看会发生什么。
-
我能想到的唯一情况是你有
$ErrorActionPreference = 'Stop',而del抛出异常,所以$DelTmpStatus的设置被跳过。你在记录你的异常吗? -
虽然我没有设置
$ErrorActionPreference,但它被设置为默认的继续。如果它被设置为停止,那不会停止整个脚本吗?如果您没有猜到,显示的代码只是完整脚本的摘录,该脚本继续运行并生成一个新的receivals.tmp文件。我目前没有记录异常。 -
@BeowulfNode42,是的,如果它设置为“停止”,那么如果没有
catch,脚本将停止。我没有解释。您可以使用一些不存在的服务器 ($target_dir = "\\blah\share\") 测试您的脚本,看看会发生什么。
标签: powershell if-statement boolean-logic