Командлет Start-Service: получение основной ошибки в случае сбоя - PullRequest
0 голосов
/ 23 мая 2019

Скажите, что я хочу запустить службу MSSSQLSERVER.это делается в PowerShell с помощью командлета Start-Service.
Иногда службы не запускаются из-за ошибки, как в примере ниже.Что меня интересует, так это основная причина сбоя, в то время как start-service, похоже, возвращает исключение powershell, универсальную оболочку, которая не содержит специфичную для ошибок информацию .

PS C:\Users\Administrator> start-service MSSQLSERVER
start-service : Failed to start service 'SQL Server (MSSQLSERVER) (MSSQLSERVER)'.
At line:1 char:1
+ Start-Service MSSQLSERVER
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
   ServiceCommandException
    + FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand

Чтобы выяснить причину проблемы, мы должны прибегнуть к команде net start, которая возвращает нас к прежним временам, которые должны быть забыты с помощью PowerShell.

C:\Users\Administrator>NET START MSSQLSERVER
The SQL Server (MSSQLSERVER) service is starting.
The SQL Server (MSSQLSERVER) service could not be started.

A service specific error occurred: 17051.

More help is available by typing NET HELPMSG 3547.

Есть ли способ увидеть лежащую в основе ошибку, выданную службой?

Ответы [ 2 ]

3 голосов
/ 23 мая 2019

Как указано I.T Delinquent , ошибка может быть найдена в исключении, однако в этом случае она будет сохранена во внутренних исключениях:

$ErrorActionPreference = "Stop"

try
{
    Start-Service -Name "MSSQLSERVER"
}
catch
{
    $msg = @()
    $err = $_.Exception
    do (
        $msg += $err.Message
        $err = $err.InnerException
    ) while ($err)

    Write-Verbose "Failed to start service: $($msg -join ' - ')"
}
0 голосов
/ 23 мая 2019

Я думаю, что было бы хорошо, если бы вы проверили эту ссылку

Но, в принципе, вы можете использовать оператор Try / Catch и вывести сообщение об ошибке, что-то вроде этого:

try{
    Start-Service MSSQLSERVER -ErrorAction Stop
}catch{
    $PSItem.Exception.Message
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...