我想为cmd中的服务设置密码。 我有select
sc.execonfiguration“服务名称”obj =“DOMAIN \用户”密码=“密码”
当我执行,它显示“[SC] ChangeServiceConfig SUCCESS” ,如果我开始我得到的服务
“Windows无法在本地计算机上启动service1服务,错误1069:由于login失败,服务未启动。
我search并得到下面的链接使用SC.exe设置服务凭据密码失败
我的密码不包含特殊字符。
有什么select呢?
首先要检查的是该用户是否具有在该机器中作为服务登录的权限。 如果他这样做(你可以按照以下步骤来检查这个),只要进入服务(开始菜单 – 输入“services”,不带引号)。 在列表中找到您的服务,然后右键单击它。 选择“属性”,然后转到“登录”选项卡。 重新输入“密码”和“确认密码”。 点击OK。 如果您的用户具有作为服务登录的权限, 则会显示一条消息“ The YourDomain \ YourUser已被授予登录即服务权限 ”。 只要尝试再次启动服务,它将工作。
如果您的用户没有这种权限,您可以使用以下两种方法之一:
1)开始菜单 – 输入“本地安全策略”,不带引号。 打开“本地策略”,然后左键单击“用户权限分配”。 在右侧面板上,右键单击“作为服务登录”,然后选择“属性”。 点击“添加用户或组”并添加您的用户。 点击OK。 您可能需要重新启动机器。
2)下载并安装“Windows server 2003资源工具包工具”( http://www.microsoft.com/en-us/download/confirmation.aspx?id=17657 )。 打开命令提示符并键入:
ntrights + r SeServiceLogonRight -u MyDomain \ MyUser -m \\%COMPUTERNAME%
重新启动计算机并尝试再次启动服务。
在您的用户被授予“作为服务登录”权限之后,您可以通过命令行创建并启动服务。
可能的问题是,它不希望引用密码。 用户名也一样。
它可能不能分辨引号是否是密码的一部分。
或者,这可能是因为给定的帐户没有被授予“作为服务登录”权限。
通常你应该检查安全事件日志,这将给出登录失败的原因。
如果您面对的帐户YourDomain \ YourUser已被授予登录即服务权限 ,您应该执行PowerShell脚本链接AddLogonasaService ,这与您的密码无关。 这是用户运行服务的权限。
嵌入代码供您参考。 您也可以参考该网址。
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
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)是密码。
这对我工作:
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>"
所以,简而言之:在配置密码之前停止服务, 启动将正常工作。