【问题标题】:Wmi ManagedComputer SetServiceAccount gives "Set service account failed"Wmi ManagedComputer SetServiceAccount 给出“设置服务帐户失败”
【发布时间】:2016-04-18 06:59:01
【问题描述】:

我正在尝试自动化 SQL+SSRS 服务器安装(MS SQL 2012 Express)的安装后配置——我认为它或多或少是this。然而,这是我第一次涉足 Powershell,我之前从未配置甚至使用过 MS SQL。我的服务器是 Windows 2008 R2 虚拟机,我是管理员,SQL 服务器安装在本地(不是集群)。我正在使用 Powershell v2.0 运行以下 sn-p(作为管理员):

Write-Output("- Setting service account ...")
Write-Output("  - Loading assembly ...")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | out-null
Write-Output("  - Loading server ...")
$mc = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer "$hostname"
Write-Output("  - Loading service ...")
#$service = $mc.Services | Where {$_.Name -eq "MSSQL`$$sqlInstanceName"}
$service = $mc.Services | Where {$_.Name -eq "ReportServer`$$sqlInstanceName"}
Write-Output("  - Changing service account credentials ...")
$service.SetServiceAccount("$hostname\sa", "$sapwd")
Write-Output("  - Commit ...")
$service.Alter()
Write-Output("- OK.")

在“更改服务帐户凭据”和“提交”之间,我的代码失败并显示以下消息:

使用“2”参数调用“SetServiceAccount”的异常:
“设置服务帐号失败。”

$sapwd 是 SQL Server 安装期间提供的密码。从来没有要求我提供相应的用户名,但有人告诉我暗示有一个“SA”用户。我在本地计算机上没有该名称的 Windows 用户;我不确定(新安装的)SQL 服务器中定义了哪些用户。

我这里的目标相当于使用GUI将“服务帐号”设置为“使用内置帐号:网络服务”,代码sn -p是基于this代码。 This post 并非完全不相关,但是 (a) 它没有得到回答,并且 (b) 我不使用聚类。

许多其他人都遇到过这个问题,但似乎没有任何可靠的答案对我有用。我如何才能找到有关此错误含义的信息,以及如何解决它?

奖金

我还需要更改“Web 服务 URL”和“报表管理器 URL”;如果你有任何关于如何做到这一点的提示,你会为我节省很多时间。

【问题讨论】:

    标签: sql-server powershell configuration automation


    【解决方案1】:

    sadatabase 用户(内置数据库管理员帐户),而不是 Windows 用户。要运行服务,您需要一个 Windows 用户帐户。通常是您为运行服务而创建的专用帐户(具有所需的权限/特权)或内置默认帐户之一,例如 NT AUTHORITY\Network ServiceNT AUTHORITY\Local Service

    使用其中一个内置帐户时,传递一个空字符串作为第二个参数,因为它们没有密码:

    $service.SetServiceAccount('NT AUTHORITY\Network Service', '')
    

    话虽如此,通常您应该在安装期间为数据库服务指定 runas 帐户,因此以后不需要更改它。

    【讨论】:

    • 感谢您的快速回复。我尝试提供NT AUTHORITY\Network Service(连同$sapwd)但得到了同样的错误。然后我尝试了当前登录用户的凭据,这似乎(!)工作。不过,这可能不是该任务的最佳用户,我将向客户询问用户配置。
    • 嗯,感谢 Microsoft 将帐户 NT AUTHORITY\Network Service 依赖于本地化。 >_
    • 更新:本地化挑战现在是solved
    • 内置账户没有密码,所以不要为它们使用$sapwd(除非变量为空)。查看更新的答案。
    • 好吧,(a) 如果我提供一个空白字符串作为密码,那么我会再次收到错误消息;和(b)我不知道“通常”,我只知道(这个)全新安装是如何工作的。我想知道一旦它击中现实世界,它是否会严重破裂。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多