У меня есть функция, которая создает библиотеку в корне семейства сайтов, поскольку у нас есть 30000 семейств сайтов, я не могу активировать ее вручную, я должен активировать ее с powershell.
Проблема в том, что когда я активирую его вручную в браузере, он работает нормально, но в powershell я получаю эту ошибку.
Я проверил активированный код функции и не увидел код, связанный с SPCurrent, поэтому не вижу причины его сбоя.
Ошибка:
Enable-SPFeature : Field not found: 'Lists.ClientBillingInstructionsUrl'.
At D:\lv\xxx.SP.InstallersGit\2.DMS\R4.8.2\Scripts\CustomFeatureUpgrade\ActivateFeatures.ps1:23 char:4
+ Enable-SPFeature -Identity $featureNameBillingInstructions -Url $spSiteCollec ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (Microsoft.Share...etEnableFeature:SPCmdletEnableFeature) [Enable-SPFeature], MissingFieldException
+ FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletEnableFeature
Код активации функции:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
String listUrl = Constants.Lists.ClientBillingInstructionsUrl;
String listName = Constants.Lists.ClientBillingInstructionsName;
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(((SPWeb)properties.Feature.Parent).Site.ID))
{
using (SPWeb web = site.OpenWeb(((SPWeb)properties.Feature.Parent).ID))
{
try
{
LoggingService.LogInfo(LoggingCategory.Feature, String.Format("Entered feature with name '{0}' and id '{1}' for list creation. List to create: (name: '{2}' , url: '{3}').",
properties.Feature.Definition.DisplayName,
properties.Feature.Definition.Id,
listName,
listUrl));
SPList billingInstructionsLibrary = web.CreateList(
listUrl, //name
"", //description
101, //type
true, //showinQuickLaunch
true, //allowManagementOfContentTypes
true, //enableVersioning
true, //enableMinorVersions
DraftVisibilityType.Reader, //draftVisibilityType
false, //forceCheckout
false //enableModeration
);
if (billingInstructionsLibrary != null)
{
#region library specific settings
billingInstructionsLibrary.Title = "-"; //this is a trick to force quicklaunch displaytext to change. (it ignores casing updates on exact same words)
billingInstructionsLibrary.Update();
billingInstructionsLibrary.Title = listName;
billingInstructionsLibrary.MajorVersionLimit = 5;
billingInstructionsLibrary.MajorWithMinorVersionsLimit = 5;
billingInstructionsLibrary.Update();
#endregion
#region add content types
billingInstructionsLibrary.AddListContentType(new SPContentTypeId(Constants.ContentTypes.Client.PONumber.ID));
billingInstructionsLibrary.AddListContentType(new SPContentTypeId(Constants.ContentTypes.Client.BillingMethod.ID));
#endregion
//save changes (because otherwise delete of default CT wont succeed
billingInstructionsLibrary.Update();
#region remove default content type
//delete content type 'document'
billingInstructionsLibrary.DeleteListContentType("Document");
#endregion
#region views
//Modify View "All items"
SPView allDocumentsView = null;
foreach (SPView view in billingInstructionsLibrary.Views)
{
if (view.Title.ToLower() == "all documents")
{
allDocumentsView = view;
break;
}
}
if (allDocumentsView != null)
{
allDocumentsView.ViewFields.DeleteAll();
allDocumentsView.ViewFields.Add(Constants.DefaultFields.DocIcon_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.LinkFilename_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.Title_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.Created_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.CreatedBy_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.Modified_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.ModifiedBy_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.Version_Name);
allDocumentsView.ViewFields.Add(Constants.DefaultFields.FileSize_name);
//Set view settings
allDocumentsView.RowLimit = 30;
allDocumentsView.IncludeRootFolder = false;
allDocumentsView.Paged = true;
allDocumentsView.Query = String.Format("<OrderBy><FieldRef Name=\"{0}\" Ascending=\"{1}\" /></OrderBy>",
Constants.DefaultFields.LinkFilename_Name,
"TRUE");
allDocumentsView.Update();
}
#endregion
billingInstructionsLibrary.Update();
LoggingService.LogInfo(LoggingCategory.Feature, String.Format("List with name '{0}' and url '{1}' created.", listName, listUrl));
}
else
{
throw new Exception(String.Format("List with name '{0}' and url '{1}' could not be found.", listName, listUrl));
}
}
catch (Exception exception)
{
LoggingService.LogError(LoggingCategory.Feature, exception);
}
}
}
});
}
catch (Exception exception)
{
LoggingService.LogError(LoggingCategory.Feature, exception);
}
}
и это код powershell, который я использую для активации функции
#Library creation
$featureNameBillingInstructionsEnabled = Get-SPFeature -Site $spSiteCollection -Identity $featureNameBillingInstructions -ErrorAction SilentlyContinue;
if($featureNameBillingInstructionsEnabled-eq $null)
{
Enable-SPFeature -Identity $featureNameBillingInstructions -Url $spSiteCollection.Url
}
else
{
Write-Host "Feature $featureNameBillingInstructionsEnabled already enabled";
}