Powershell: регистрация службы с учетной записью сетевого сервиса приводит к ошибке 1068 - PullRequest
0 голосов
/ 14 февраля 2020

Я в основном запускаю команду powershell (с повышенным уровнем powershell):

New-Service -name MyServiceName -binaryPathName "C:\myservice.exe -m myArgument" -Description "MyDescription" -displayName "MyDisplayName" -startupType Manual -credential $mycreds

Предварительно я запускаю это, чтобы сгенерировать $ mycreds (имя службы - правильное имя для сетевой службы). на немецком языке:

$login = "NT-AUTORITÄT\Netzwerkdienst"
$secpasswd = (new-object System.Security.SecureString)
$mycreds = New-Object System.Management.Automation.PSCredential ($login, $secpasswd)

Когда я сейчас ищу службу в диспетчере служб windows, я вижу это в настройках входа в систему (снимок экрана на немецком языке, но вы можете убедиться, что учетные данные, кажется, имеют было передано правильно):

Service logon settings with correct service account name

Когда я сейчас запускаю службу, я получаю эту ошибку:

1068: ...“the dependency service or group failed to start”.

Эта ошибка делает нет никакого смысла, поскольку нет никакой зависимости от этой службы.

Если я теперь, однако, открою настройки входа в систему,

  1. установите для них значение "Локальная система"
  2. нажмите применить
  3. , установите для них значение «account:» и введите имя учетной записи (NT-AUTORITÄT \ Netzwerkdienst), также стирая значения в полях «пароль» и «повторный пароль»
  4. нажмите OK

Если я сейчас попытаюсь запустить службу, она останется rts успешно.

Однако мне нужно автоматически зарегистрировать мою службу, чтобы она использовала учетную запись networkservice.

Я что-то не так делаю? Есть ли другой способ сделать это?

Обратите также внимание, что я уже позаботился о том, чтобы предоставить учетной записи Network-service право входа в систему в качестве службы до действий, указанных в этом вопросе. Учетная запись не просто получает право входа в систему в качестве службы, потому что я вручную ввел имя учетной записи и принял всплывающее окно с сообщением, которое обычно сообщает мне, что учетная запись только что получила право.

Новое! Я добавил это, с чем вы могли бы помочь мне, попробовав это самостоятельно:

С помощью этого скрипта вы можете проверить это самостоятельно, создав службу из notepad.exe:

$secpasswd = (new-object System.Security.SecureString)
$SID = [System.Security.Principal.WellKnownSidType]::NetworkServiceSid
$Account = new-object system.security.principal.securityidentifier($SID, $null)
$NetworkServiceName = $Account.Translate([system.security.principal.ntaccount]).value 
$mycreds = New-Object System.Management.Automation.PSCredential ($NetworkServiceName, $secpasswd)
New-Service -Name test1 -BinaryPathName C:\Windows\System32\notepad.exe -Description testDescription -StartupType Manual -Credential $mycreds

Обязательно предоставьте учетной записи NetworkService право входа в систему в качестве службы.

Получается ли ошибка при запуске службы после этого? Это ошибка зависимости, которая не имеет смысла, или это что-то другое?

1 Ответ

1 голос
/ 26 февраля 2020

Вы можете попробовать методы Cim. они могут помочь вам получить то, что вам нужно:

$Arguments = @{

DesktopInteract =$false ;
DisplayName = "notepad Test" ;
#ErrorControl =" " ;
#LoadOrderGroup =" " ;
#LoadOrderGroupDependencies =" " ;
Name ="Notepad" ;
PathName ="C:\Windows\System32\notepad.exe" ;
ServiceDependencies = $Null ;
#ServiceType = "Own Process"#[int32]16 ; #ownService
StartMode ="Manual" ;
StartName ="NT AUTHORITY\NetworkService" ;# ([System.Security.Principal.WellKnownSidType]::BuiltinAdministratorsSid).tostring() ;
#StartPassword = $Null

};

 Invoke-CimMethod -ClassName win32_service -methodname Create -Arguments $Arguments

Чтобы удалить службу через Cim:

$x =Get-CimInstance -ClassName win32_service -filter "name like '%note%'"
Invoke-CimMethod -InputObject $x -MethodName delete

Если у вас есть ошибки, обратитесь к этой странице, чтобы узнать, что означают коды ошибок:

Ошибки при создании можно найти здесь (22) - это та, с которой я столкнулся, пока не выяснил правильные средства.

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/create-method-in-class-win32-service

Чтобы узнать, как установлены элементы, чтобы вы могли получить нужный ответ (кроме пароля):

Get-CimInstance -ClassName win32_service -filter  'Name like "%note%"' | select *  

Name                    : Notepad
Status                  : OK
ExitCode                : 0
DesktopInteract         : False
ErrorControl            : Ignore
PathName                : C:\Windows\System32\notepad.exe
ServiceType             : Own Process
StartMode               : Manual
Caption                 : notepad Test
Description             : 
InstallDate             : 
CreationClassName       : Win32_Service
Started                 : False
SystemCreationClassName : Win32_ComputerSystem
SystemName              : 
AcceptPause             : False
AcceptStop              : False
DisplayName             : notepad Test
ServiceSpecificExitCode : 0
StartName               : NT AUTHORITY\NetworkService
State                   : Stopped
TagId                   : 0
CheckPoint              : 0
DelayedAutoStart        : False
ProcessId               : 0
WaitHint                : 0
PSComputerName          : 
CimClass                : root/cimv2:Win32_Service
CimInstanceProperties   : {Caption, Description, InstallDate, Name...}
CimSystemProperties     : Microsoft.Management.Infrastructure.CimSystemProperties
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...