
Я пишу программу Java, которая будет вытаскивать журналы, связанные с процессами для приложения. Для этого мне нужно получить процессы Java, созданные в определенном месте. Мне нужно знать, как получить эту информацию на компьютере Windows с помощью одной команды или комбинации команд, которые можно передать в одной строке.
Я немного поизучав, остановился на PowerShell как на варианте. Я получаю результат, используя две отдельные команды PowerShell:
Powershell
Get-Process java| where {$_.path -like 'D:\ptc\Windchill_11.0\Java\jre\bin\java.exe'}
Но когда я объединяю эти два варианта, никаких результатов не получается:
Powershell ; Get-Process java ^| where {$_.path -like 'D:/ptc/Windchill_11.0/Java/jre/bin/java.exe'}
Может ли кто-нибудь помочь мне объединить эти два варианта или есть другие варианты, кроме PowerShell?
решение1
Хорошо, это означает, что вы совсем новичок в PowerShell и еще не потратили достаточно времени, чтобы вникнуть в него, поэтому стройте догадки. Это вам не поможет.
Не наращивание просто приведет к ненужной путанице, разочарованию, ошибкам, плохим привычкам, заблуждениям и т. д. Поэтому я предлагаю наращивать темп, чтобы вы могли уменьшить / избежать таких переживаний. Тем не менее, с любым обучением будут происходить некоторые догадки / эксперименты, потому что такова природа зверя.;-}
Не смешивайте синтаксис Java с кодом PowerShell. В PowerShell есть много зарезервированных слов, переменных и особых способов, которыми вам нужно сконструировать код для запуска скриптов, команд и .exe.
Точка с запятой в PowerShell не делает эту строку однострочной.(pipeline one liner). Это две отдельные независимые команды/блоки кода на одной строке. Это терминатор оператора.
Прежде чем выполнять команды PowerShell, необходимо уже находиться в сеансе PowerShell.
Итак, это...
Get-Process java| where {$_.path -like "D:\ptc\Windchill_11.0\Java\jre\bin\java.exe"}
… работает, потому что вы, по-видимому, уже запустили PowerShell и вручную ввели эту команду.
Этот..
Powershell ; Get-Process java ^| where {$_.path -like 'D:/ptc/Windchill_11.0/Java/jre/bin/java.exe'} enter image description here
… не выполняется, поскольку вы не находитесь в сеансе PowerShell перед выполнением команды PowerShell.
Видеть: Справка по командной строке PowerShell.exe
# EXAMPLES
# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand
Итак, ваш…
PowerShell -Command "Get-Process java ^ | where {$_.path -like 'D:/ptc/Windchill_11.0/Java/jre/bin/java.exe'}"
PowerShell: запуск исполняемых файлов
При использовании PowerShell необходимо пониматьПравила цитированияимеет первостепенное значение.
Цитаты PowerShell – Расширять или не расширять, вот в чем вопрос
История правил цитирования PowerShell
Опять же, поскольку вы новичок, потратьте необходимое время на:
...и используйте всеникаких затрат / бесплатные ресурсывсечерез Интернет. Как и MS TechNetРуководство по выживанию в Windows PowerShell.