我试图捕获 System.UnauthorizedAccessException 异常。该异常会在用户没有对特定文件的读取权限时发生。
$fwlog = $env:SystemRoot + "\system32\logfiles\firewall\pfirewall.log"
if(Test-Path $fwlog)
{
try
{
Get-Content -ReadCount 10 -Path $fwlog
}
catch [System.UnauthorizedAccessException]
{
Write-Host "caught"
}
}
else
{
write-host "File does not exist"
}
但是我一直收到这个错误信息:
Get-Content : Access to the path 'C:\Windows\system32\logfiles\firewall\pfirewall.log' is denied.
At D:\SourceCode\PowerShell\FwLogParser.ps1:7 char:9
+ Get-Content -ReadCount 10 -Path $fwlog
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Windows\syst...l\pfirewall.log:String) [Get-Content], UnauthorizedAccessException
+ FullyQualifiedErrorId : GetContentReaderUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetContentCommand
我在这里做错了什么?
谢谢您的回答。我仍然不理解为什么它会出现 [Exception] 而不是更具体的 [System.UnauthorizedAccessException]。
$fwlog = $env:SystemRoot + "\system32\logfiles\firewall\pfirewall.log"
$ErrorActionPreference = "stop"
if(Test-Path $fwlog)
{
try
{
Get-Content -ReadCount 10 -Path $fwlog
}
catch [System.UnauthorizedAccessException]
{
Write-Host "caught"
}
catch [Exception]
{
Write-Host "Caugth generic exception"
}
}
else
{
write-host "File does not exist"
}
Get-Content -ReadCount 10 -Path $fwlog -erroraction stop
。该命令能够读取文件内容,并在读取过程中出现错误时停止执行。 - Loïc MICHEL