13

我想从 cmd 为服务设置密码。我得到了选择

sc.exe 配置“服务名称”obj=“域\用户”密码=“密码”

当我执行时,它显示“[SC] ChangeServiceConfig SUCCESS” ,如果我启动我得到的服务

“Windows 无法在本地计算机上启动 service1 服务。错误 1069:由于登录失败,该服务未启动。”

我搜索并获得了以下链接 Using SC.exe to set service credentials password failed

我的密码不包含特殊字符。

这样做的选择是什么?

4

4 回答 4

5

首先要检查的是该用户是否有权在该计算机上作为服务登录。如果他这样做(并且您可以执行以下程序来检查),只需转到服务(开始菜单 - 键入“服务”,不带引号)。在列表中找到您的服务,然后右键单击它。选择“属性”,然后转到“登录”选项卡。重新输入“密码”和“确认密码”。单击确定。如果您的用户确实有权作为服务登录,则会显示一条消息“帐户 YourDomain\YourUser 已被授予作为服务登录的权限”。只需尝试再次启动该服务,它就会工作。

如果您的用户没有这种权限,您可以使用以下两种方法之一:

1) 开始菜单 - 键入不带引号的“本地安全策略”。打开“本地策略”,然后左键单击“用户权限分配”。在右侧面板上,右键单击“作为服务登录”,然后选择“属性”。单击“添加用户或组”并添加您的用户。单击确定。您可能必须重新启动计算机。

2) 下载并安装“Windows Server 2003 Resource Kit Tools”(http://www.microsoft.com/en-us/download/confirmation.aspx?id=17657)。打开命令提示符并键入:

ntrights +r SeServiceLogonRight -u MyDomain\MyUser -m \\%COMPUTERNAME%

重新启动计算机并尝试再次启动该服务。

在您的用户被授予作为服务登录权限后,您可以通过命令行创建和启动服务。

于 2015-08-19T17:38:55.770 回答
3

如果您面对帐户 YourDomain\YourUser 已被授予作为服务登录权限,您应该执行 powershell 脚本链接 AddLogonasaService,这与您的密码无关。这是用户运行服务的权利/许可。

我嵌入代码供您参考。您也可以参考该 URL。

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) 是密码。

于 2015-10-10T20:35:47.913 回答
1

问题可能是它不希望在密码周围加上引号。用户名也是如此。

它可能无法判断引号是否是密码的一部分。

或者,可能是因为给定帐户尚未被授予“作为服务登录”权限。

通常您应该检查安全事件日志,它会给出登录失败的原因。

于 2013-09-27T14:06:55.793 回答
-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>"

因此,简而言之: 在配置密码之前停止服务,启动将正常工作。

于 2014-03-23T17:02:06.527 回答