Свойство .PathName
Win32_Service
экземпляров , возвращаемое вашим Get-WmiObject
вызовом:
иногда содержит значения с встроенные двойные кавычки вокруг пути к исполняемому файлу
- Такие встроенные двойные кавычки не являются частью пути и должны быть удалены перед дальнейшей обработкой, например с помощью
Split-Path
.
может дополнительно содержать аргументы для передачи исполняемому файлу, независимо от того, указан ли последний в двойных кавычках или нет.
Предупреждение: Некоторые Win32_Service
экземпляры возвращают $null
в свойстве .PathName
.
Для работы с обоими сценариями используйте следующий подход:
$service = get-wmiobject -query 'select * from win32_service where name="SQLBrowser"'
$serviceBinaryPath = if ($service.pathname -like '"*') {
($service.pathname -split '"')[1] # get path without quotes
} else {
(-split $service.pathname)[0] # get 1st token
}
# Assuming that $serviceBinaryPath is non-null / non-empty,
# it's safe to apply `Split-Path` to it now.
Обратите внимание, что довольно многие службы используют общий исполняемый файл svchost.exe
, поэтому значение .PathName
не обязательно отражает конкретный двоичный файл службы - см. этот ответ .
В качестве отступления: Get-WmiObject
устарело в PowerShell v3 в пользу Get-CimInstance
- см. этот ответ.