Powershell复制项目退出代码1

时间:2018-11-11 12:36:46

标签: powershell copy-item

我有一个脚本,其中包含要复制的几个文件,我或多或少都这样做。

baz

以此类推。

现在,如果未复制任何文件,我希望此脚本以1退出。

预先感谢

2 个答案:

答案 0 :(得分:1)

您要的内容类似于set -e中的bash选项,如果命令发出失败信号(条件语句除外),该脚本将导致脚本立即退出。 [ 1]

PowerShell没有这样的选项 [2] ,但是您可以模拟它:

# Set up a trap (handler for when terminating errors occur).
Trap { 
    # Print the error. 
    # IMPORTANT: -ErrorAction Continue must be used, because Write-Error
    #            itself would otherwise cause a terminating error too.
    Write-Error $_ -ErrorAction Continue
    exit 1 
}

# Make non-terminating errors terminating.
$ErrorActionPreference = 'Stop'

# Based on $ErrorActionPreference = 'Stop', any error reported by
# Copy-Item will now cause a terminating error that triggers the Trap
# handler.
Copy-Item xxx1 yyy1 -Force
Copy-Item xxx2 yyy2 -Force
Copy-Item xxx3 yyy3 -Force
Copy-Item xxx4 yyy4 -Force

# Handle failure of an external program.
foo.exe -bar
if ($LASTEXITCODE -ne 0) { Throw "foo failed." } # Trigger the trap.

# Signal success.
exit 0

注意

  • PowerShell-内部,错误处理中不使用退出代码。它们通常仅在从PowerShell调用外部程序时,或者在PowerShell / PowerShell脚本需要向外界发出成功与失败的信号时才起作用(当从另一个shell调用时,例如Windows上的cmd或{ {1}}(在类似Unix的平台上)。

  • PowerShell的自动bash变量反映了最近执行的名为$LASTEXITCODE的外部程序/ PowerShell脚本的退出代码。

  • 对通过非零退出代码发出故障信号的外部(控制台/终端)程序的调用不会触发exit <n>块,因此会显式trap声明在上面的代码段中

  • 除非您明确设置退出代码,否则最后执行的外部程序的退出代码将决定脚本的总体退出代码。

[1]请注意,此选项有其批评之处,因为难以记住何时可以容忍失败以及何时导致脚本中止的确切规则-请参阅http://mywiki.wooledge.org/BashFAQ/105

[2]可能在this GitHub issue中对其进行支持。

答案 1 :(得分:0)

您可以执行以下操作,它会退出并显示许多powershell命令错误。

$errorcount = $error.count

Copy-Item xxx1 yyy1 -Force
Copy-Item xxx2 yyy2 -Force
Copy-Item xxx3 yyy3 -Force
Copy-Item xxx4 yyy4 -Force

exit $error.count - $errorcount