我们正在运行SharePoint 2007 SP1,并且从Active Directory导入配置文件(每天运行完整导入)。我们遇到了一个问题,即许多用户在Active Directory中无意中被禁用,这导致他们的配置文件从SharePoint中删除。我们重新启用了他们的Active Directory帐户并运行了完整导入以恢复其SharePoint配置文件。但是,他们所有的My Links都丢失了。是否有恢复它们的方法或最佳实践?
答案 0 :(得分:6)
我发布了这个,因为我无法在任何地方找到问题的答案。描述与我类似问题的This post by Joel Oleson给了我一个关于去哪里寻找缺失数据的提示。 This post by Corey Roth向我展示了如何以编程方式将链接添加到用户My Links。
首先 - 您需要恢复包含My Links数据的数据库的备份。您不希望还原工作数据库,而是希望将其还原到其他位置。存储在SSP数据库中的链接。 (您可以通过进入中央管理员 - >共享服务管理员找到数据库的名称,然后打开SSP的菜单,然后单击编辑属性 - 属性页面上列出了SSP数据库。)
恢复数据库后,您想要检索链接信息:
此查询将为您提供以下信息:
SELECT UPF.NTName, UL.Url, UL.Title
FROM UserLinks UL INNER JOIN UserProfile_full UPF ON UL.recordID = UPF.recordID
INNER JOIN UserPrivacyPolicy UPP ON UL.PolicyId = UPP.id
ORDER BY NTName
(我应该注意,我没有考虑链接设置的组或隐私级别,您可以通过查看UserPrivacyPolicy表中的信息找到该信息)
我将结果复制到Excel&将其保存为.csv文件(逗号分隔列表) - 只是因为我的生产服务器无法访问我恢复数据库的位置。我订购了标题最后的列,因为标题可能包含逗号,这会弄乱我如何阅读数据。 (我检查过,其他两个字段不包含逗号 - 在做出这个假设之前,你应该检查一下。)
然后我写了一个小控制台应用程序来导入数据。它需要两个参数:这些是使用的参考:
这是代码:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.Web;
namespace UserLinks
{
class Program
{
static void Main(string[] args)
{
string _accountName = "", _linkTitle = "", _url = "", _tmp = "", _path = "", _SPSsite = "";
// Check arguments
if (args.Length != 2)
{
ShowUsage();
return;
}
_path = args[0];
_SPSsite = args[1];
using (SPSite _site = new SPSite(_SPSsite))
{
ServerContext _context = ServerContext.GetContext(_site);
UserProfileManager _userProfileManger = new UserProfileManager(_context);
/* Expecting a comma seperated list with 3 columns:
* AccountName in the format Domain\Account name - I am assuming there are no commas in this field
* URL - I am assuming there are no commas in this field
* Link Title - link title is last because there may be commas in the title
*/
TextReader _reader = new StreamReader(_path, System.Text.Encoding.Default);
while (_reader.Peek() != -1)
{
_tmp = _reader.ReadLine();
_accountName = _tmp.Substring(0, _tmp.IndexOf(','));
_tmp = _tmp.Replace(_accountName + ",", "");
_url = _tmp.Substring(0, _tmp.IndexOf(','));
_linkTitle = _tmp.Replace(_url + ",", "");
try
{
UserProfile _currentUser = _userProfileManger.GetUserProfile(_accountName);
QuickLinkManager _quickLinkManager = _currentUser.QuickLinks;
_quickLinkManager.Create(_linkTitle, _url, QuickLinkGroupType.General, null, Privacy.Private); //I am assuming that all links have no group assigned to them and they are all private links
}
catch (Exception ex)
{
Console.WriteLine(_accountName);
Console.WriteLine(ex);
}
}
_reader.Close();
}
}
private static void ShowUsage()
{
Console.WriteLine("Usage");
Console.WriteLine("UserLinks [FilePath] [SharePoint URL]");
}
}
}
解决问题&作为附带好处,此程序可用于强制链接显示在用户的“我的链接”列表中。
答案 1 :(得分:1)
这篇文章提供了一些关于MyLinks及其与SSP数据库关系的非常好的信息(这实际上是这些链接存储在违反直觉的地方。)希望您可以让DBA验证这些链接是否仍然存在;并且它们与正确的配置文件相关联。
http://www.k2distillery.com/2009/01/moving-sharepoint-my-links-between-ssps.html
答案 2 :(得分:0)
执行配置文件导入时,通常会丢失现有的自定义/更新信息。