为什么Get-SPWeb中的错误没有传播到PowerShell?

时间:2013-09-19 18:41:04

标签: .net sharepoint powershell

如果我有以下

$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的怪癖?

1 个答案:

答案 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