Назад | Перейти на главную страницу

sc.exe создать проблему с паролем службы

У меня есть сценарий для создания различных служб на наших серверах разработки (все 64-разрядные версии Windows 2008) с использованием sc.exe.

Сценарий включает настройку учетной записи пользователя для запуска службы, но я никогда не могу правильно установить пароль. Он устанавливает имя учетной записи нормально, но всякий раз, когда я пытаюсь запустить службу, я получаю ошибку входа в систему. Если я вручную меняю пароль в сервисной оснастке, все работает нормально ... что дает ??

Я пробовал с паролем и без кавычек, безуспешно.

Пример используемой мной команды: sc create PackageProcessing5 binPath = "c: \ Program Files (x86) .... exe" obj = na \ sys-WSPackager password = "password"

Как я уже сказал, служба создается успешно, и когда я проверяю оснастку, учетная запись пользователя также верна. Просто пароль почему-то упускается из виду. Я заметил, что если я ввожу неправильный пароль в командную строку, он не жалуется, поэтому я думаю, он вообще не проверяет его во время создания?

Есть идеи здесь?

Его нужно разбить на несколько команд, попробуйте использовать скрипт Powershell ниже.

По сути, он добавляет учетную запись домена в SeServiceLogonRight, а затем создает и запускает службу с учетной записью домена.

  • Примечание. Powershell необходимо запускать от имени администратора.

    Пример Powershell ниже - создать службу Windows (в данном случае агент TeamCity) и запустить ее как учетную запись домена:

    $accountToAdd = "mydomain\account"
    $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 ""Log on 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
        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 ""Log on as a service""" -ForegroundColor DarkCyan
    }
    Write-Host "Done." -ForegroundColor DarkCyan
    #Create Service and set Credentials
    cmd /c sc create TCAgent5 binPath= "C:\BuildAgent5\launcher\bin\TeamCityAgentService-windows-x86-32.exe -s C:\BuildAgent5\launcher\conf\wrapper.conf" DisplayName= "Team City Agent5" auto obj= account@mydomain Password= mypassword
    

Добавьте в сценарий «sc config password = <password>», чтобы установить пароль учетной записи runas после «sc create».

Я столкнулся с той же проблемой и исправил ее с помощью "sc config".

Я думаю, что проблема на самом деле вовсе не связана с паролем: возможно, вы пренебрегли присвоением учетной записи бита SeServiceLogonRight (обычно «Вход в качестве службы» в графическом интерфейсе пользователя). Я нашел имя в эта страница справки по Windows XP Resource Kit на TechNet См. Статью в базе знаний kb259733 (Windows 2000) или kb327545 (Windows Server 2003) чтобы узнать, как это сделать из графического интерфейса, но я предполагаю, что вы действительно хотите сделать это из командной строки, для чего вам следует посмотреть ntrights.

Это основано на моей попытке сначала создать такую ​​же простую службу с моей собственной учетной записью пользователя и с существующей учетной записью службы, которую я создал ранее. С моей учетной записью я получил то, что, как я полагаю, было той же ошибкой, что и вы при "sc start":

The service did not start due to a logon failure.

Вместо этого с учетной записью службы я получил эту ошибку:

The service did not respond to the start or control request in a timely fashion.

Я предполагаю, что последняя ошибка связана с тем, что программа, которую я пытался запустить, не была подготовлена ​​для работы в качестве службы NT. (Если это помогает, то сработавшая команда sc не заключала пароль в кавычки.)

К вашему сведению, обе команды имели форму:

sc create xemacs-beta-repo binPath= "C:\Program Files\TortoiseHg\hg.exe serve -d -R C:\code\xemacs-beta -E C:\code\xemacs-beta.hg-serve.log" obj= Sam10\фу password= бар

где Sam10 это имя моей системы (Windows XP Pro SP3).

Я действительно не могу сказать, почему повторный ввод пароля в графическом интерфейсе может исправить что-либо, кроме как предположить, что он может добавить SeServiceLogonRight к рассматриваемой учетной записи - использовали ли вы новые учетные записи каждый раз, когда пробовали это, или вы также пробовали с учетными записями, которые вы вручную заставили работать?