如何在powershell中确认上一个命令的完成

如何在powershell中确认上一个命令的完成,powershell,Powershell,我有一个简单的powershell脚本,每天运行它来压缩和移动一些日志文件。如何在删除原始日志文件之前测试命令是否成功完成 set-location $logpath1 & $arcprg $pram $dest_file $source_file Move-Item $dest_file $arcdir 如果移动项目完成ok,我想删除项目$source\u file可以通过特殊变量$?访问上一个命令的完成状态 请注意,这对于非终止错误(如从移动项目中获得的错误)最有效。终止错误是.N

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

set-location $logpath1
& $arcprg $pram $dest_file $source_file
Move-Item $dest_file $arcdir

如果移动项目完成ok,我想删除项目$source\u file

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

请注意,这对于非终止错误(如从移动项目中获得的错误)最有效。终止错误是.NET中直接抛出的
错误或抛出的异常的结果,它们会改变代码流。最好使用
trap
try/catch
语句来观察这些类型的错误


对于WRT
$?
和控制台EXE,另一件需要注意的事情是,PowerShell假定退出代码为0表示成功(即
$?
设置为
$true
),而其他任何内容都表示失败(
$?
设置为
$false
)。不幸的是,并非所有console exe都遵守退出代码约定,例如,可能有多个成功代码和一个失败代码(0)。对于那些不遵守退出代码规则的EXE,请使用注释中指出的
$LastExitCode
,以确定成功或失败。

根据您的parnoid以及用于存档的组件,您可以检查存档以确认文件Exits。我们使用DotNetZip组件压缩归档日志文件()


也为了防止任何形式的“哥特西亚!”$?仅存储上次命令运行时的true/false。这包括变量分配和其他您可能不认为是“命令”的内容。您还可以读取$LASTEXITCODE以获取控制台应用程序返回的实际退出代码。还值得考虑的是,外部程序很可能“遵循规则”,使用0表示成功,使用非0表示失败,但可能会使用不同的非零值指示什么类型的故障<代码>$LastExitCode
在这种情况下也很有价值,它允许不同的代码路径根据到底出了什么问题来处理故障。
$zipFileObj =  new-object Ionic.Zip.ZipFile($zipName);

[void] $zipFileObj.UpdateFile( "$fileName", "" )   # adds file if doesn't already exist

trap   #catch an zip errors and Stop processing
{
  write-error "Caught a system exception. Execution stopped"
  write-error $("TRAPPED: " + $_.Exception.Message); 
  exit
}

if ( $zipFileObj.ContainsEntry( $fileName) )
{
  remove-item $pathFile  # delete file from file-system
}
else
{
  # throw error
}