使用 PowerShell 配置 SharePoint 2010 UPS

Configure SharePoint 2010 UPS with PowerShell

已找到解决方案:对于碰巧遇到此问题的任何其他人,请查看此内容:http://www.harbar.net/archive/2010/10/30/avoiding-the-default-schema-issue-when-creating-the-user-profile.aspx

TL;DR 当您通过 CA 创建 UPS 时,它会使用服务器场帐户在 SQL 服务器上创建一个 dbo 用户和架构,但是当通过 powershell 进行创建时,它会使用以农场帐户命名的架构和用户,但仍尝试使用 dbo 架构管理 SQL,这当然失败得很厉害。

注意:我只包含了我认为相关的脚本部分。我可以根据需要提供其他零件。

我在这方面束手无策。一切似乎都运行良好,除了 UPS 同步服务卡在 "Starting",我已经离开它超过 12 个小时了。

通过 GUI 设置时它工作正常,但我正在尝试使每个可能的步骤自动化。在自动化时,我试图包括 GUI 中可用的每个选项,以便在需要更改时它会出现。

这是我目前的情况:

$domain = "DOMAIN"
$fqdn = "fully.qualified.domain.name"
$admin_pass = "password"

New-SPManagedPath "personal" -WebApplication "http://portal.$($fqdn):9000/"
$upsPool = New-SPServiceApplicationPool -Name "SharePoint - UPS" -Account "$domain\spsvc"
$upsApp = New-SPProfileServiceApplication -Name "UPS" -ApplicationPool $upsPool -MySiteLocation "http://portal.$($fqdn):9000/" -MySiteManagedPath "personal" -ProfileDBName "UPS_ProfileDB" -ProfileSyncDBName "UPS_SyncDB" -SocialDBName "UPS_SocialDB" -SiteNamingConflictResolution "None"
New-SPProfileServiceApplicationProxy -ServiceApplication $upsApp -Name "UPS Proxy" -DefaultProxyGroup

$upsServ = Get-SPServiceInstance | Where-Object {$_.TypeName -eq "User Profile Service"}
Start-SPServiceInstance $upsServ.Id

$upsSync = Get-SPServiceInstance | Where-Object {$_.TypeName -eq "User Profile Synchronization Service"}

$upsApp.SetSynchronizationMachine("Portal", $upsSync.Id, "$domain\spfarm", $admin_pass)
$upsApp.Update()

Start-SPServiceInstance $upsSync.Id

我已经尝试 运行 每次一行一行,在定义变量后将其直接复制到 shell window 中,其中 none给出一个错误,但 CA GUI 必须做一些我遗漏的事情。

对于碰巧遇到这个问题的任何其他人,请看看这个:http://www.harbar.net/archive/2010/10/30/avoiding-the-default-schema-issue-when-creating-the-user-profile.aspx

TL;DR 当您通过 CA 创建 UPS 时,它会使用场帐户在 SQL 服务器上创建一个 dbo 用户和架构,但是当通过 powershell 执行此操作时,它会使用名为的架构和用户创建它在农场帐户之后,但仍然尝试使用 dbo 模式管理 SQL,这当然失败得很厉害。

解决方法是将我的代码放到自己的脚本文件中,然后使用Start-Process将脚本运行作为农场账户(比链接文章中描述的Job方法干净很多):

$credential = Get-Credential ("$domain\spfarm", $SecureString)

Start-Process -FilePath powershell.exe -ArgumentList "-File C:\upsSync.ps1" -Credential $credential