SharePoint 2010中的场功能状态

时间:2012-10-15 14:02:22

标签: c# sharepoint sharepoint-2010

我又回来了另一个SharePoint问题! 我有一个应用程序,它返回本地SharePoint服务器场上的功能列表。但问题在于它似乎将它们作为“在线”返回,无论它们是否被激活。 例如,即使未激活,此功能仍会在我的应用中显示为“在线”:This feature would still be displayed as 'Online'

我目前使用的代码如下:

    foreach (SPFeatureDefinition featureDefinition in featureCollection)
            {
                if (featureDefinition.Scope.Equals(scopeSelect))
                {
                    string featureName = featureDefinition.DisplayName;

                        XElement newItem = new XElement("Item", featureName);
                        XElement itemStatus = new XElement("Item", featureDefinition.Status);
                        infoTree.Add(newItem);
                        infoTree.Add(itemStatus);
                    }
                }
            }

问题是featureDefinition.Status始终返回'Online',无论该功能的实际状态如何。这让我相信我做错了什么,或者.Status属性实际上并不是我想要的。

我可以使用其他属性让我走上正轨吗?

非常感谢任何指导/建议!

修改 另外,IIS重置对它返回不同的状态没有任何影响。

1 个答案:

答案 0 :(得分:2)

是的,.Status属性会告诉您Definition的状态,但不会显示特定范围内功能的激活状态。您需要了解一些有关此功能的内容:功能定义只是模板 - 您在特定级别(服务器场,Web应用程序,站点,Web)激活功能的实例 - 因此您无法检查该功能的状态定义,但需要检查特征的实例是否存在于特定范围。

要通过PowerShell检查功能状态,您只需使用Get-SPFeature as described here即可。如您所见,所有代码都在调用Get-SPFeature,如果它返回特定范围的内容,则会激活该功能。你可以在C#中做同样的事情。

因此,当您想要检查功能是否已激活,例如在网站范围内,您可以迭代SPSite.Features,当您发现您知道它被激活的功能时。 Powershell命令行开关没有做任何其他事情。

您想要检查服务器场功能,以便可以在SPWebService.ContentService.Features检查集合以检查已激活的服务器场功能。请参阅another example of a PowerShell script (almost looks like C#) here