Split-Path удаляет from´´ из Service Pathname - PullRequest
0 голосов
/ 25 февраля 2019

Это так просто, как Split-Path удаляет последний '"' из каждого пути, который вы запрашиваете в любой службе:

$service = get-wmiobject -query 'select * from win32_service where name="SQLBrowser"';
Write-output $service.pathname 
Write-output $service.pathname | Split-Path

enter image description here

Я пробовал с несколькими сервисами, и это всегда одинаково.

Считаете ли вы, что это ошибка PowerShell, которую мы должны указать Microsoft?

Есть ли обходной путь?

РЕДАКТИРОВАТЬ: Спасибо @ mklement0 за ответ и обходной путь.

Оказывается, это действительно Ошибка PowerShell в Microsotf

1 Ответ

0 голосов
/ 25 февраля 2019

Свойство .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 - см. этот ответ.

...