我又回来了另一个SharePoint问题! 我有一个应用程序,它返回本地SharePoint服务器场上的功能列表。但问题在于它似乎将它们作为“在线”返回,无论它们是否被激活。 例如,即使未激活,此功能仍会在我的应用中显示为“在线”:
我目前使用的代码如下:
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重置对它返回不同的状态没有任何影响。
答案 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。