使用SC.exe设置服务凭据密码失败

我知道这个问题过去曾被问过,但是没有提供一个满意的答案。

我正在使用SC命令来configuration服务的凭据。

SC.exe config "SERVICE NAME" obj= "domain\user" password= "password" 

这成功完成,但是当我启动服务时,它不能执行login。
[ NET START "service name" ]

如果我手动更新从services.msc的密码,那么当我启动服务,它工作正常。

我有数百台服务器来更新这个更改发生在部署的中间,所以手动干预不是一个选项。

我已经尝试使用configuration来更新login帐户,然后另一个configuration命令的密码。

从所有帐户, SC.exe不适用于密码和Microsoft没有帮助。

想法?

当您将服务配置为通过服务属性窗口中的正常路由在特定帐户下运行时,将自动授予该帐户作为服务权限登录。 当您使用sc.exe时,您还必须授予用户登录为服务权限。

作为服务登录

除了在进行更改之前停止服务并授予用户作为服务登录的权限之外 ,还必须添加type= own参数,否则将失败:

 [SC] ChangeServiceConfig FAILED 87: The parameter is incorrect 

所以这是工作的命令:

 SC.EXE config "ServiceName" type= own obj= "domain\user" password= "password" 

它甚至与密码中的特殊字符,因为我有双括号之间的密码。

我有这个问题。 感谢ST对原文的评论,我意识到我需要研究如何输入密码。 在我的情况下,我需要在密码中加倍百分号( %% )。

ST提供的链接是有帮助的: 转义cmd中的特殊字符 。

尝试在设置密码之前停止服务:

 sc.exe stop "<my_service>" 4:4:3 sc.exe config "<my_service>" obj= "\.<local_acc_name>" password= "<local_acc_pass>" sc.exe start "<my_service>" 

运行一些Powershell脚本时遇到这个问题,在我的情况下,问题是密码中的特殊字符。

通过将密码存储在一个带有双引号的变量中来得到它的工作:

$servicePassword = "`"passwordWithSpecialCharacters`"" cmd /c sc config myService obj= mydomain\myuser password= $servicePassword

特殊字符是:

()'"$><^?

尝试这个。 开始菜单 – 键入“本地安全策略”不带引号。 打开“本地策略”,然后左键单击“用户权限分配”。 在右侧面板上,右键单击“作为服务登录”,然后选择“属性”。 点击“添加用户或组”并添加您的用户。 点击OK。 您可能需要重新启动机器。

添加后,您可以在cmd中设置服务的用户名和密码。

在重新启动服务之前,您应该授予您的用户登录为服务的权限。 不幸的是,没有办法使用默认的Windows工具从命令行执行它,但是您可以使用Windows server 2003资源工具包工具中的小型附加util ntright.exe。

https://www.microsoft.com/zh-CN/download/details.aspx?id=17657下载&#x5B83;

安装完成后,您将在C:\ Program Files(x86)\ Windows Resource Kits \ Tools (或32位计算机上的Program Files)中获得许多工具。

你需要ntrights.exe 您可以将其复制并从其他主机上的任何位置运行。

要授予您的用户所需的权限,您应该添加到您的脚本中:

 ntrights.exe +r SeServiceLogonRight -u "%DOMAIN%\%USER%" 

之后,您可以成功地用新用户重新启动服务。 还有一个选项可以在远程主机上运行ntrights.exe:

 ntrights.exe +r SeServiceLogonRight -u "%DOMAIN%\%USER%" -m %HOSTNAME% 

当我需要远程重新配置大量主机时,该工具非常有用。