如果我有以下
$webs = Get-SPWeb -Limit all -ErrorAction Stop
foreach($web in $webs)
{
Write-Host $web.SiteUsers.xml
}
我知道.NET中的相同代码会从我的服务器上的一个站点SPWeb.SiteUsers.xml
获得异常。
实际的异常或原因并不重要 - 但是运行上面的代码我没有看到传播或报告给PowerShell的任何异常,$ web.SiteUsers.xml只是在网站上发现错误的ruturns null。
这是一个强大的东西还是Get-SPWeb的怪癖?
答案 0 :(得分:3)
使用属性语法时,PowerShell将捕获所有异常。如果要查看异常,则需要使用方法语法。例如,而不是:
$web.SiteUsers
你会使用:
$web.get_SiteUsers()
如果Set-StrictMode允许异常通过,那就太好了,但事实并非如此。
此行为的主要原因与格式有关。有许多常用的属性使用默认格式抛出异常,并且使用错误消息混淆输出绝对不是正确的做法。
也就是说,PowerShell在格式化输出时只捕获异常似乎是合理的。您可以使用Microsoft Connect站点提供反馈。例如,此商品会抱怨此问题:http://connect.microsoft.com/PowerShell/feedback/details/533233/exceptions-thrown-in-property-getters-are-silently-ignored