Как я могу извлечь "Путь к исполняемому" всех сервисов с помощью PowerShell

Get-Service *sql* | sort DisplayName | out-file c:/servicelist.txt

У меня есть один скрипт PowerShell для извлечения списка всех служб, запущенных на моем локальном компьютере, теперь, помимо отображения "Статус", "Имя" и "Отображаемое имя", я также хочу отобразить "Путь к исполняемому файлу",

Ответ 1

Я думаю, вам нужно прибегнуть к WMI:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, State, PathName

Обновление Если вы хотите выполнить некоторые манипуляции с выбранными данными, вы можете использовать рассчитанные свойства, как описано здесь.

Например, если вам просто нужен текст в кавычках для Pathname, вы можете разделить на двойные кавычки и взять элемент массива 1:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, @{Name="Path"; Expression={$_.PathName.split('"')[1]}} | Format-List

Ответ 2

Вариант запроса WMI, который может быть быстрее (я просто должен был сделать это для клиента SCCM)

$SQLService=(get-wmiobject -Query 'Select * from win32_service where Name like "*SQL*"') | Select-object Name, DisplayName, State, Pathname

Другой трюк заключается в том, чтобы ловушка для множественных результатов SQL, если вы хотите, чтобы имена путей не содержались в Double Quotes (так что вы можете действовать на них)

$SQLService | Select-Object Name, DisplayName, State, @{Name='PathName';Expression=$_.Pathname.replace('"','')}

Большим преимуществом использования -query в get-wmiobject (или get-ciminstance) является скорость обработки. Более старый пример получает полный список, а затем фильтры, в то время как последний захватывает очень прямой список.

Просто добавив два цента :)

Приветствую всех! Sean The Energized Tech