.png)
У меня возникли проблемы с решением незначительной проблемы. Поэтому для процессов я могу сохранить его имя из его $PID, используя следующую строку:
$process_name=get-Process -id $PID |select -expand name
Однако я хочу запустить этот процесс какуслуга. Я хочу выполнить ту же операцию, а именно: сохранить имя службы, например [service_name].exe, в переменную $service_name.
Причина этого в том, что я хочу иметь только один файл .ps1, который я затем могу превратить в несколько служб, которые используют свои собственные файлы .exe.config. Так что только один файл .ps1 может быть скомпилирован несколько раз в службы, такие как
[service1.exe, service2.exe, service3.exe, ...]
и каждая служба использует свой соответствующий файл .exe.config, такой как
[service1.exe.config, service2.exe.config, service3.exe.config, ...]
Есть ли способ сделать это с помощью PowerShell?
решение1
Вы можете получить информацию об услуге от Processid
(Get-WmiObject Win32_Service -Filter "ProcessId='$PID'")
решение2
Используя Get-WmiObject вы можете собрать исполняемые файлы:
(Get-WmiObject win32_service | Where-Object -Property Name -Like *wallet*).PathName
Этот пример отобразит имя исполняемого файла вместе с любыми переключателями. Если вы хотите захватить это в переменную, попробуйте:
$proc_name = (Get-WmiObject win32_service | Where-Object -Property Name -Like *wallet*).PathName
Если вам нужна расширенная информация о недвижимости, попробуйте:
Get-WmiObject win32_service | ?{$_.Name -like '*wallet*'} | Select-Object -Property *
решение3
Вот еще один способ - может быть, те, что выше, более надежны?
$id = 5556
# (debugging) Nice little table to make sure you've got the right thing...
Get-Process | Where-Object Id -EQ $id | Select ProcessName,Id | Format-Table
# Finally just hand me back the name proper
Get-Process | Where-Object Id -EQ $id | Select -Expand ProcessName
# Depending on what you're doing with it...
# Stop-Process -Id $id