PowerShell Get-Content: Try{ .. } catch { ..}?

9

我完成了

try {
    $g = Get-Content $file
} catch { 
    return ""
}

但是如果另一个进程仍然在写入$file(并阻塞它),我会收到错误消息:无法访问文件...为什么我没有'落入'catch{},却收到了错误消息 - 我如何检查文件是否可访问?谢谢你的帮助。祝好,Golly。
已解决 :)
我只需使用:
 try {
     $g = New-Object system.IO.StreamReader $file
 } catch { 
     return ""
 }

如果文件仍在写入,则会重定向到catch分支。

1个回答

21

在 Try/Catch 结构中,Catch 块只在遇到终止错误时才会被调用。在你的 cmdlet 上使用 -ErrorAction Stop 强制所有错误都成为终止错误:

try {
    $g = Get-Content $file -ErrorAction Stop
} catch { 
    return ""
}

谢谢 - 这是一个受欣赏的解决方案! - gooly
这个答案对我没用,可能是因为我也在使用-Raw标志。我找到的唯一替代方法是在尝试获取内容之前使用Test-Path -Path "<路径+文件名>" - undefined

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