68 lines
2.4 KiB
PowerShell
68 lines
2.4 KiB
PowerShell
Function Get-ServiceInfoByCIMFragment {
|
|
<#
|
|
.SYNOPSIS
|
|
Get the services of all services matched by the CIM fragment passed in.
|
|
|
|
.PARAMETER QueryFragment
|
|
A name or path fragment to match against
|
|
|
|
.PARAMETER ForceExact
|
|
Don't look for something "like" the QueryFragment, but _only_ this value
|
|
|
|
.OUTPUTS
|
|
Will return an array of any services found
|
|
#>
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$false)]
|
|
[Alias("Fragment")]
|
|
[string]$QueryFragment = "",
|
|
|
|
[switch]$ForceExact
|
|
)
|
|
|
|
$logLead = (Get-LogLeadName)
|
|
|
|
# I want to ensure that anything with a slash is escaped if present
|
|
# However, if it came in double escaped already I just quadded it
|
|
# This is the lazier version of inspecting all \\ vs \ in the string.
|
|
$pathifiedFragment = $QueryFragment.Replace('\','\\').Replace('\\\\','\\')
|
|
|
|
Write-Verbose "$logLead : Looking for anything that matches [$pathifiedFragment]"
|
|
|
|
$filter = "PathName like '%{0}%' OR Name like '%{0}%'" -f $pathifiedFragment
|
|
if ($ForceExact) {
|
|
$filter = "PathName like '{0}' OR Name like '{0}'" -f $pathifiedFragment
|
|
}
|
|
|
|
$cimServices = (Get-CIMInstance Win32_Service -Filter $filter)
|
|
|
|
$returnResults = @()
|
|
|
|
foreach($cimService in $cimServices) {
|
|
Write-Verbose "$logLead : Found [$($cimService.Name)] at [$($cimService.Path)]"
|
|
$rawExePath = ($cimService.PathName.Remove($cimService.PathName.LastIndexOf(".exe")) + ".exe").Replace('"', '')
|
|
|
|
$returnResults += @{
|
|
Name = $cimService.Name
|
|
DisplayName = $cimService.DisplayName
|
|
Path = $cimService.PathName
|
|
ExePath = $rawExePath
|
|
# SRE-18952 - We may be breaking things we don't expect - cbrand 2023-01-11
|
|
# This is due to how we need to do better path matching for HTTP service names
|
|
ParentFolder = Split-Path -Path $rawExePath -Parent
|
|
Started = $cimService.Started
|
|
State = $cimService.State
|
|
Status = $cimService.Status
|
|
StartMode = $cimService.StartMode
|
|
# Provided to make comparison checks to other things easier.
|
|
# The name in several places is StartType
|
|
StartType = $cimService.StartMode
|
|
ProcessId = $cimService.ProcessId
|
|
InstallDate = $cimService.InstallDate
|
|
UserName = $cimService.StartName
|
|
}
|
|
}
|
|
|
|
return $returnResults
|
|
} |