sc.exe 配置“服务名称"obj=“域用户";密码=“密码";不工作 [英] sc.exe config "Service Name" obj= "DOMAINUser" password= "password" not working
问题描述
我想通过 cmd 为服务设置密码.我有选择
I want to set password for a service from the cmd. I got the option
sc.exe config "服务名称" obj= "DOMAINUser" 密码= "password"
当我执行时,它显示 "[SC] ChangeServiceConfig SUCCESS"如果我启动服务我得到了
When I execute, its showing "[SC] ChangeServiceConfig SUCCESS" and if I start the service I am getting
Windows 无法在本地计算机上启动 service1 服务.错误 1069:由于登录失败,服务没有启动."
我搜索并获得了以下链接使用 SC.exe 设置服务凭据密码失败
I searched and got the below link Using SC.exe to set service credentials password fails
我的密码不包含特殊字符.
My password doesn't consist of special character.
有什么方法可以做到这一点?
What's the option to do that?
推荐答案
如果你遇到账户YourDomainYourUser已经被授予Log On As a Service权限,你应该执行powershell脚本链接AddLogonasaService 这与您的无关密码.这是用户运行服务的权利/许可.
If you face The account YourDomainYourUser has been granted the Log On As a Service right, you should execute powershell script link AddLogonasaService and this is nothing to do with your password. It's a right/permission for an user to run the service.
我嵌入了代码供您参考.您也可以引用该 URL.
Am embedding the code for your reference. You can refer that URL as well.
param($accountToAdd)
#written by Ingo Karstein, http://blog.karstein-consulting.com
# v1.0, 01/03/2014
## <--- Configure here
if( [string]::IsNullOrEmpty($accountToAdd) ) {
Write-Host "no account specified"
exit
}
## ---> End of Config
$sidstr = $null
try {
$ntprincipal = new-object System.Security.Principal.NTAccount "$accountToAdd"
$sid = $ntprincipal.Translate([System.Security.Principal.SecurityIdentifier])
$sidstr = $sid.Value.ToString()
} catch {
$sidstr = $null
}
Write-Host "Account: $($accountToAdd)" -ForegroundColor DarkCyan
if( [string]::IsNullOrEmpty($sidstr) ) {
Write-Host "Account not found!" -ForegroundColor Red
exit -1
}
Write-Host "Account SID: $($sidstr)" -ForegroundColor DarkCyan
$tmp = [System.IO.Path]::GetTempFileName()
Write-Host "Export current Local Security Policy" -ForegroundColor DarkCyan
secedit.exe /export /cfg "$($tmp)"
$c = Get-Content -Path $tmp
$currentSetting = ""
foreach($s in $c) {
if( $s -like "SeServiceLogonRight*") {
$x = $s.split("=",[System.StringSplitOptions]::RemoveEmptyEntries)
$currentSetting = $x[1].Trim()
}
}
if( $currentSetting -notlike "*$($sidstr)*" ) {
Write-Host "Modify Setting ""Logon as a Service""" -ForegroundColor DarkCyan
if( [string]::IsNullOrEmpty($currentSetting) ) {
$currentSetting = "*$($sidstr)"
} else {
$currentSetting = "*$($sidstr),$($currentSetting)"
}
Write-Host "$currentSetting"
$outfile = @"
[Unicode]
Unicode=yes
[Version]
signature="`$CHICAGO`$"
Revision=1
[Privilege Rights]
SeServiceLogonRight = $($currentSetting)
"@
$tmp2 = [System.IO.Path]::GetTempFileName()
Write-Host "Import new settings to Local Security Policy" -ForegroundColor DarkCyan
$outfile | Set-Content -Path $tmp2 -Encoding Unicode -Force
#notepad.exe $tmp2
Push-Location (Split-Path $tmp2)
try {
secedit.exe /configure /db "secedit.sdb" /cfg "$($tmp2)" /areas USER_RIGHTS
#write-host "secedit.exe /configure /db ""secedit.sdb"" /cfg ""$($tmp2)"" /areas USER_RIGHTS "
} finally {
Pop-Location
}
} else {
Write-Host "NO ACTIONS REQUIRED! Account already in ""Logon as a Service""" -ForegroundColor DarkCyan
}
Write-Host "Done." -ForegroundColor DarkCyan
为了设置服务的身份,我使用了一个 vbscript
To set the identity for services, I have used a vbscript
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name = 'Servicename'")
For Each objservice in colServiceList
errReturn = objService.Change( , , , , , ,WScript.Arguments.Item(0), WScript.Arguments.Item(1))
objService.StartService()
Next
其中 WScript.Arguments.Item(0) 是用户名 arg,WScript.Arguments.Item(1) 是密码.
Where WScript.Arguments.Item(0) is the username arg and WScript.Arguments.Item(1) is password.
这篇关于sc.exe 配置“服务名称"obj=“域用户";密码=“密码";不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!