【问题标题】:Why don't errors rasied inside Get-SPWeb get propagated to powershell?为什么在 Get-SPWeb 中引发的错误不会传播到 powershell?
【发布时间】:2013-09-25 00:02:52
【问题描述】:

如果我有以下情况

$webs = Get-SPWeb -Limit all -ErrorAction Stop

foreach($web in $webs) 
{
    Write-Host $web.SiteUsers.xml 
}

我知道 .NET 中的相同代码会从 SPWeb.SiteUsers.xml 我的服务器上的一个站点获得异常。

实际的异常或原因并不重要 - 但运行上面的代码我没有看到任何传播或报告给 PowerShell 的异常,$web.SiteUsers.xml 只是在出错的站点上返回 null。

这是一个 powershell 的东西还是 Get-SPWeb 的一个怪癖?

【问题讨论】:

  • 来自technet.microsoft.com/en-us/library/ff607807.aspx: It is important to note that every site collection returned by the Get-SPWeb cmdlet is automatically disposed of at the end of the pipeline. To store the results of Get-SPWeb in a local variable, the Start-SPAssignment and Stop-SPAssignment cmdlets must be used to avoid memory leaks. Therfor,一旦 cmdlet 完成,$webs 将成为已处置对象的集合。
  • @Eris Erm...是的。但这甚至还没有开始回答这个问题。
  • 是否启用了strict-mode

标签: .net sharepoint powershell


【解决方案1】:

使用属性语法时,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

【讨论】:

  • Connect 链接已损坏 - 找不到页面(但使用 HTTP 500) - 并且该页面似乎也不在 Wayback Machine 上。虽然如果您转到connect.microsoft.com/PowerShell/feedback 并搜索“533233”,它确实会出现在搜索结果中,并且您可以在那里看到该项目的 sn-p。
猜你喜欢
  • 2014-12-11
  • 2019-05-20
  • 2012-06-22
  • 1970-01-01
  • 2021-02-12
  • 2021-11-18
  • 2013-10-27
  • 1970-01-01
相关资源
最近更新 更多