Start-Service cmdlet:在失败的情况下获取潜在错误

Ago*_*noX 2 powershell windows-services

说我要启动MSSSQLSERVER服务。这是通过Start-Servicecmdlet在 PowerShell 中完成的。
有时服务无法启动,原因是如下例所示的错误。我感兴趣的是失败的根本原因,而start-service似乎正在返回 powershell 异常,一个不包含特定错误信息的通用包装器。

PS C:\Users\Administrator> 启动服务 MSSQLSERVER
启动服务:无法启动服务“SQL Server (MSSQLSERVER) (MSSQLSERVER)”。
在行:1 字符:1
+ 启动服务 MSSQLSERVER
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
   服务命令异常
    + FullQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand

为了找出问题的根本原因,我们不得不求助于net start命令,这让我们回到了应该被 PowerShell 遗忘的旧时光。

C:\Users\Administrator>NET 启动 MSSQLSERVER
SQL Server (MSSQLSERVER) 服务正在启动。
无法启动 SQL Server (MSSQLSERVER) 服务。

发生服务特定错误:17051。

通过键入 NET HELPMSG 3547 可以获得更多帮助。

有没有办法查看服务抛出的底层错误?

mhu*_*mhu 5

正如IT 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 ' - ')"
}
Run Code Online (Sandbox Code Playgroud)