我们正在运行 SharePoint 2007 SP1,并且配置文件是从 Active Directory 导入的(每天都会运行完整的导入)。我们遇到了一个问题,即许多用户在 Active Directory 中被无意禁用,这导致他们的配置文件从 SharePoint 中删除。我们重新启用了他们的 Active Directory 帐户并运行了完整的导入,从而恢复了他们的 SharePoint 配置文件。但是,他们所有的“我的链接”都丢失了。是否有恢复它们的方法或最佳实践?
3 回答
我发布了这个,因为我无法在任何地方找到我的问题的答案。 Joel Oleson 的这篇文章描述了一个与我类似的问题,给了我一个提示,告诉我去哪里寻找丢失的数据。Corey Roth 的这篇文章向我展示了如何以编程方式将链接添加到用户的“我的链接”。
首先,您需要恢复包含“我的链接”数据的数据库备份。您不想恢复工作数据库,而是希望将其恢复到另一个位置。存储在 SSP 数据库中的链接。(您可以通过进入 Central Admin --> Shared Services Admin 找到数据库的名称,然后打开 SSP 的菜单并单击 Edit Properties - 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 文件(逗号分隔列表) - 只是因为我的生产服务器无法访问我恢复数据库的位置。我最后订购了带有标题的列,因为标题可能包含逗号,这会弄乱我在数据中的读取方式。(我检查了其他两个字段不包含逗号 - 在做出这个假设之前你应该检查你的。)
然后我写了一个小控制台应用程序来导入数据。它需要两个参数:
- 包含所有链接的文件所在的路径(即 c:\temp\links.csv)
- 来自 My Links 的 SSP 的 url 已丢失(即https://portal.mydomain.com)
这些是使用的参考:
- Microsoft.Office.Server (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI\Microsoft.Office.Server.dll)
- Microsoft.SharePoint (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI\Microsoft.SharePoint.dll)
- 系统
- 系统数据
- 系统.Web
- 系统文件
这是代码:
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]");
}
}
}
所以问题解决了,作为一个附带的好处,这个程序可以用来强制链接显示在用户的我的链接列表中。
这篇文章有一些关于 MyLinks 及其与 SSP 数据库的关系的非常好的信息(这实际上是这些链接存储的地方,违反直觉。)希望您可以让您的 DBA 验证这些链接是否仍然存在;并且它们与正确的配置文件相关联。
http://www.k2distillery.com/2009/01/moving-sharepoint-my-links-between-ssps.html
当您进行配置文件导入时,您通常会冒丢失现有自定义/更新信息的风险。