Tasks/BuiltIn/Service/Get-Service.ps1
|
<#
.SYNOPSIS Retrieves information about Windows services .DESCRIPTION Gets detailed information about one or more Windows services including status, startup type, dependencies, and account information. .PARAMETER ServiceName Name of the service to retrieve (supports wildcards) .PARAMETER DisplayName Display name of the service (supports wildcards) .NOTES TaskName: Service.GetService Version: 1.0.0 Author: Toolbox Tags: Service, Windows, Management RequiresElevation: False SupportedOS: Windows PSEdition: Desktop, Core MinPSVersion: 5.1 Timeout: 30 .EXAMPLE Invoke-Task -TaskName 'Service.GetService' -Computers 'localhost' .EXAMPLE Invoke-Task -TaskName 'Service.GetService' -Computers 'SERVER01' -TaskParameters @{ ServiceName = 'W3SVC' } #> [CmdletBinding()] param( [Parameter()] [string]$ServiceName, [Parameter()] [string]$DisplayName ) try { Write-Verbose "Retrieving service information..." # Build Get-Service parameters $getServiceParams = @{} if ($PSBoundParameters.ContainsKey('ServiceName')) { $getServiceParams['Name'] = $ServiceName Write-Verbose "Filtering by ServiceName: $ServiceName" } if ($PSBoundParameters.ContainsKey('DisplayName')) { $getServiceParams['DisplayName'] = $DisplayName Write-Verbose "Filtering by DisplayName: $DisplayName" } # Get services $services = if ($getServiceParams.Count -gt 0) { Get-Service @getServiceParams -ErrorAction Stop } else { Get-Service -ErrorAction Stop } # Convert to array if single service $services = @($services) Write-Verbose "Found $($services.Count) service(s)" # Build structured output $results = foreach ($service in $services) { # Get additional service details via WMI $wmiService = Get-CimInstance -ClassName Win32_Service -Filter "Name='$($service.Name)'" -ErrorAction SilentlyContinue [PSCustomObject]@{ ServiceName = $service.Name DisplayName = $service.DisplayName Status = $service.Status.ToString() StartType = $service.StartType.ToString() CanStop = $service.CanStop CanPauseResume = $service.CanPauseAndContinue DependentServices = @($service.DependentServices | Select-Object -ExpandProperty Name) ServicesDependedOn = @($service.ServicesDependedOn | Select-Object -ExpandProperty Name) Description = if ($wmiService) { $wmiService.Description } else { $null } PathName = if ($wmiService) { $wmiService.PathName } else { $null } StartName = if ($wmiService) { $wmiService.StartName } else { $null } ProcessId = if ($wmiService) { $wmiService.ProcessId } else { $null } State = if ($wmiService) { $wmiService.State } else { $null } } } Write-Verbose "Service information retrieved successfully" # Return results [PSCustomObject]@{ Success = $true ServiceCount = $results.Count Services = $results } } catch { Write-Error "Failed to retrieve service information: $_" throw } |