저는 애플리케이션에 대한 프로세스 관련 로그를 가져오는 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의 세미콜론은 해당 줄을 하나의 라이너로 만들지 않습니다.(파이프라인 하나의 라이너). 이는 동일한 줄에 있는 두 개의 별도 독립 명령/코드 블록입니다. 명령문 종결자입니다.
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 세션에 있지 않았기 때문에 실패합니다.
# 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 인용문 – 확장하거나 확장하지 않는 것이 문제입니다.
다시 한 번 말씀드리지만, 귀하는 초보자이므로 다음 사항에 필요한 시간을 투자하십시오.
...그리고 모든 것을 사용하세요비용 없음/무료 리소스모두웹을 통해. MS TechNet과 마찬가지로Windows PowerShell 생존 가이드.