This question already has an answer here:
How to handle failed variable assignments in powershell? [duplicate]

(1个答案)


在11个月前关闭。




下午!

编辑

经过更多的故障排除后,我注意到它似乎不想从New-Item -ItemType Directory -Path Z:\PMO\PMOBits\test部分捕获错误。如果输入Null值,它将在Get-Logger函数和Write-output中捕获该错误。为什么不捕获文件夹已存在错误?

我的PowerShell脚本中有一个日志记录功能,并且正在尝试使用此功能合并一些错误处理。下面是日志记录功能。
Function Get-Logger {
    param(
       [Parameter(Mandatory=$true)]
       [String]$message,
       [Parameter(Mandatory=$false)]
       [validatescript({[enum]::getvalues([system.consolecolor]) -contains $_})][string]$Color
    )

    $TimeStamp = Get-Date -Format "MM-dd-yyy hh:mm:ss"

    Write-Host $TimeStamp -NoNewline
    IF ($Color) {
        Write-Host `t $message -ForegroundColor $($color)
    } Else {
        Write-Host `t $message -ForegroundColor Cyan
    }
    $logMessage = "[$TimeStamp]  $message"
    $logMessage | Out-File -Append -LiteralPath $VerboseLogFile
}

我正在使用一些简单的代码进行错误处理测试,请参阅下面的测试代码。
Try { New-Item -ItemType Directory -Path Z:\PMO\PMOBits\test }
    Catch {
        Get-Logger "ERROR: This file already exists"
    }

当我运行脚本时,我在终端上看到该错误已经存在,但并没有像catch部分那样显示在我的日志文件中。

我也尝试不使用下面的函数来捕获错误:
try{...}
catch {
Write-Output $_ | Out-File -Append -LiteralPath $VerboseLogFile
}

最佳答案

使用-ErrorAction Stop语句添加New-Item

    Try { New-Item -ItemType Directory -Path Z:\PMO\PMOBits\test -ErrorAction Stop }
    Catch {
        Get-Logger "ERROR: This file already exists"
    }

关于function - Try/Catch语句似乎不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60642232/

10-12 18:28