如何在powershell中确认完成以前的命令

Tra*_*vis 10 powershell

我有一个简单的PowerShell脚本,每天运行以压缩和移动一些日志文件.如何在删除原始日志文件之前测试命令是否成功完成.

set-location $logpath1
& $arcprg $pram $dest_file $source_file
Move-Item $dest_file $arcdir
Run Code Online (Sandbox Code Playgroud)

如果Move-Item完成,我想删除item $ source_file

Kei*_*ill 22

可以通过特殊变量访问上一个命令的完成状态$?.

请注意,这适用于非终止错误(就像您从Move-Item获得的那样).终止错误是throw在.NET中抛出直接或异常的结果,它们会改变代码流.最好使用traptry/catch声明来观察那些类型的错误.

注意WRT $?和控制台exes的另一件事是PowerShell假定退出代码为0意味着成功(即$?设置为$true),其他任何意味着失败($?设置为$false).不幸的是,并非所有控制台exe都遵守退出代码约定,例如,可能存在多个成功代码和单个故障代码(0).对于那些不遵循退出代码规则的exes,请按照$LastExitCode注释中的指示使用以确定成功或失败.

  • 还要尝试防止任何类型的“陷阱!” $?只存储最后一次命令运行的 true/false。这包括变量赋值和其他您可能不认为是“命令”的东西。 (2认同)
  • 您还可以从$ LASTEXITCODE中读取以获取控制台应用程序返回的实际退出代码. (2认同)