【发布时间】:2022-08-18 14:52:40
【问题描述】:
我正在编写一个脚本,它将执行以下操作:
- 检查服务(在本例中为 XboxGipSvc)是否正在运行
- 如果服务正在运行,什么也不做
- 如果服务未运行,请尝试启动服务
- 如果服务启动失败,捕获错误并记录到 C:\\TEMP\\RemediationLog.log
我相信我已经正确地完成了我的 try/catch 块,但是即使我在运行 try 块时遇到错误,它也不会按预期将 $error 记录到文件中。
这是我的代码:
$Error.Clear() try{ $Airlock1 = Get-Service -Name XboxGipSvc -ErrorAction Stop while ($Airlock1.Status -ne \"Running\"){ Start-Service $Airlock1 -ErrorAction Stop Write-Host $Airlock1.Status Write-Host \"Service is Starting\" Start-Sleep -Seconds 5 $Airlock1.Refresh() if ($Airlock1.Status -eq \"Running\"){Write-Host \"Service is now running\"} } } catch [Microsoft.PowerShell.Commands.StartServiceCommand]{ { if ($error -ne $null) { $test = Test-Path -path C:\\TEMP\\RemediationLog.log if ($test -eq $false){New-Item -Path C:\\TEMP\\RemediationLog.log} $error | Out-File -FilePath C:\\TEMP\\RemediationLog.log -Force -Append Write-Host $error.Exception[0] } } }
-
几个观察。我相信你的捕获应该是异常类型
[Microsoft.PowerShell.Commands.ServiceCommandException]。if ($error -ne $null)应该反转为if ($null -ne $error)或只是if ($error)但是这个 if 语句完全不需要,因为我们知道有一个错误,因为我们毕竟在一个 catch 块中。
标签: powershell try-catch powershell-ise