错误处理和获取服务的问题

Problem with error handling and get service

我正在尝试让 Powershell 进入;
能够 stop/start 远程服务。
记录它,所以如果它需要 stop/start 服务,它会打印出来。
但我遇到的一个大问题是,如果该服务不存在,它会吐出一个巨大的错误。
我仍在编写脚本的其余部分,这将在关闭应用程序方面做很多事情,但我不知道该错误是否意味着脚本的其余部分不会 运行.
还有一个问题是我不确定如何将 WriteLog 函数也放在脚本的第二阶段。
我可以在 IF 之后放置多个 {} 部分,这样我就可以 运行 停止并写入日志吗?

以下代码仅用于停止服务。
所以它;
1.报告服务已经停止。
2. 停止它,如果不是。
- 第 1 步和第 2 步有效,如果服务存在,则为 3 我遇到了
的问题 3. 如果服务不存在,我希望它继续(因为服务不存在不是问题)但打印出它不存在,因为它们可能对了解有用

请注意,Write-Log 是一种同时写入物理日志文件和控制台的功能。

IF (Get-Service -ComputerName localhost -Name ('ServiceName') | Where-Object {$_.Status -eq "Stopped"})
    {Write-Host "'ServiceName' is already stopped, proceeding..."}
ELSEIF
    (Get-Service -ComputerName localhost -Name ('ServiceName') | Where-Object {$_.Status -eq "Running"})
    {Get-Service -ComputerName localhost -Name ('ServiceName') | Stop-Service -Force}
ELSEIF 
    (Get-Service -ComputerName localhost -Name ('ServiceName') -ErrorAction "Continue")
    {Write-Host "'ServiceName' doesn't exist, proceeding..."}

现在打印出 3 次找不到服务的错误。
我知道这是因为它在通过管道进行评估之前无法获得服务,无论它是否停止。
所以我认为我使用的方法是完全错误的,但不知道该去哪里。
除了“ServiceName 不存在,继续...”之外,我希望不会打印任何内容

以这种方式使用 IF 语句很快就会失控。此外,您以不必要的方式多次获得服务。你最好使用这样的东西:

try{
    #Getting service - This way the service is only queried once, making the script fast among other things
    $service = Get-Service -Name 'Service Name' -ErrorAction Stop

    switch ($service.Status){
        'Stopped'{Write-Host "$($service.Name) is already stopped"}
        'Running'{Stop-Service $service -Force -ErrorAction Stop}
        Default{Write-Host 'Service is neither stopped or running'}
    }
}catch{
    #Catching errors
    Write-Host 'Error'
}