Start-Service cmdlet:发生故障时获取基础错误

时间:2019-05-23 08:38:07

标签: powershell windows-services

说我要启动MSSSQLSERVER服务。这是在PowerShell中通过Start-Service cmdlet完成的。​​
有时,由于以下示例中的错误,服务无法启动。 我感兴趣的是失败的根本原因,而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 个答案:

答案 0 :(得分:3)

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 ' - ')"
}

答案 1 :(得分:0)

我认为您可以检查一下link

但是基本上,您可以使用Try / Catch语句并从错误中输出消息,如下所示:

try{
    Start-Service MSSQLSERVER -ErrorAction Stop
}catch{
    $PSItem.Exception.Message
}