仅在出现错误时创建错误日志文件

Create error-logfile only if there is an error

我有一个简单的 powershell 脚本,我用它来执行 python 脚本。 我为 redirectStandardOutput 和 redirectstandarderror 预定义了路径,因此我可以在之后检查执行情况。

$datestring = (Get-Date).ToString(“s”).Replace(“:”,”-”) 
$base_path = "C:\mypath"
$python = $base_path + "\...\python.exe"
$py_file = $base_path + "\ScriptsPython\myscript.py"
$log_path = $base_path + "\Logfiles\myscript_$datestring.txt"
$log_path_error = $base_path + "\Logfiles\error_myscript_$datestring.txt"

cd "$base_path\...\" 
start-process -FilePath $python """$py_file""" -redirectStandardOutput $log_path -RedirectStandardError $log_path_error -NoNewWindow

脚本运行良好。 唯一困扰我的是,即使没有错误,它仍然会创建一个空的错误日志文件。 有没有办法告诉 powershell 仅在确实存在错误时才创建错误日志文件?

您应该继续阅读 try/catch/finaly

使用“Try/Catch”指令,因此如果“Try”指令出现错误,脚本将继续使用“Catch”块。

例如:

Try
{
    Your script here...
}
Catch
{
    If there is an error in the "Try" block, the script goes into "Catch" block.
    Create an Error Message / Log file.
}

您还可以添加异常,这样如果出现特定错误,它会进入不同的 catch 块和 returns 不同的代码。

我认为通过使用参数-RedirectStandardError,总是会创建日志文件,无论是否将错误写入其中。
如何检查错误日志文件是否存在并且之后长度为零。如果是,删除它?

$datestring = (Get-Date).ToString("s").Replace(":","-") 
$base_path = "C:\mypath"
$python = $base_path + "\...\python.exe"
$py_file = $base_path + "\ScriptsPython\myscript.py"
$log_path = $base_path + "\Logfiles\myscript_$datestring.txt"
$log_path_error = $base_path + "\Logfiles\error_myscript_$datestring.txt"

cd "$base_path\...\" 
start-process -FilePath $python """$py_file""" -redirectStandardOutput $log_path -RedirectStandardError $log_path_error -NoNewWindow

# test if the errorlog exists and if there is nothing in it, delete it
$errorFile = Get-Item -Path $log_path_error -ErrorAction SilentlyContinue
if ($errorFile -and $errorFile.Length -eq 0) { Remove-Item -Path $errorFile -Force }

P.S。我更喜欢使用 Join-Path cmdlet,而不是连接字符串以形成路径。