I'm working on a PowerShell script to monitor the status of three services: A, B, and C. My goal is to identify which services have failed and store that information in a variable called $Failed. For instance, if services A and C fail, the $Failed output should contain A and C. I have a snippet of code that checks one service, but I'm struggling to generalize this for multiple services. Here's an example of how I check the status for service A:
```powershell
$serviceNameA = "WinDefend"
$A = Get-Service -Name $ServiceNameA -ErrorAction SilentlyContinue
if ($null -ne $A) {
Write-Host "Service Status is $($A.Status)"
if($A.Status -eq "Stopped"){
$WinDefendStatus = 'False: Service Inactive'
} else {
$WinDefendStatus = 'True: Service Active'
}
} else {
Write-Host "Service not found"
$WinDefendStatus = 'False: Service Not Found'
}
Write-Host $WinDefendStatus
```
1 Answer
To tackle this issue, consider creating a function that takes an array of service names, checks their status, and builds an output collection. Here's a simple example:
```powershell
function Get-ServiceStates {
param ([string[]]$ServiceNames)
foreach ($name in $ServiceNames) {
try {
$service = Get-Service -Name $name -ErrorAction Stop
[pscustomobject]@{ Name = $service.Name; State = $service.Status }
} catch {
Write-Warning "Service '$name' not found."
}
}
}
```
Define your services in an array and call this function. You can then filter the results based on the status you are interested in!
This is super helpful! I was overthinking it and you just simplified the entire process for me. Cheers!