PowerShell中的异常日志记录

3
我目前在我的PowerShell脚本中遇到了记录异常的问题。我正在尝试将一个文件复制到C:\ Windows \ System32,并且如果出现错误,我想要在我的日志文件中添加一个错误行。到目前为止,我已经尝试了两种方法。 示例1:
$LogPath = "C:\Test.txt
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition

Copy-Item $scriptPath\Devcon.exe C:\Windows\System32 -ErrorAction SilentlyContinue -ErrorVariable $Errors

Foreach($error in $Errors)
{
    add-content -Path $LogPath -Value $($error.Exception) -Force
}

示例2:
$LogPath = "C:\Test.txt
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition

Try{
    Copy-Item $scriptPath\Devcon.exe C:\Windows\System32
}
Catch [System.Exception]
{
    add-content -Path $LogPath -Value "There was an error why trying to copy the file." -Force
    add-content -Path $LogPath -Value $Error -Force
}

我可以将项目添加到日志文件中,以便确定这不是与文件权限有关的问题。我缺少什么?

1
方法1不能使用这些变量名。$error是一个保留的自动变量名,它存储全局错误列表,您不能将其用作循环变量。总的来说,@Neolisk是正确的,您需要将ErrorAction设置为Stop以强制停止。如果您更改变量名称(例如foreach($err in $errors)),则仍然可以使用整体方法#1,如果您喜欢的话。 - latkin
1个回答

3

我认为你遇到的错误是非终止性的。这就是为什么它没有进入catch块的原因。

请尝试使用以下代码替换你的Copy-Item行:

Copy-Item $scriptPath\Devcon.exe C:\Windows\System32 -ErrorAction Stop

ErrorAction帮助 (MSDN)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接