考虑以下非常简单的代码:
Try {
Copy-Item -Path '\\server\g$\thisfolder\thisfiledoesntexist.ini' -Destination 'c:\temp' -ErrorAction Stop
}
Catch {
"Ran into an issue: $_"
}
这可以很好地捕获源文件不存在的错误。但是以下内容将不会发生-没有错误生成。
Try {
Copy-Item -LiteralPath '\\?\UNC\server\g$\thisfolder\thisfiledoesntexist.ini' -Destination 'c:\temp' -ErrorAction Stop
}
Catch {
"Ran into an issue: $_"
}
但是...这将捕获错误
Try {
Get-ChildItem -LiteralPath '\\?\UNC\server\g$\thisfolder\thisfiledoesntexist.ini' -ErrorAction Stop | Copy-Item
}
Catch {
"Ran into an issue: $_"
}
这是我第一次有机会使用文字路径-这种行为是有意/无意的吗?
答案 0 :(得分:1)
我认为您在Windows PowerShell下发现了Copy-Item
的错误。似乎在输入?
或-Path
的任何位置都包含-LiteralPath
字符可以防止由于路径不存在而导致错误被捕获。
该错误似乎已在PowerShell Core上修复,在上面的代码中确实会导致引发异常。