アプリケーションのプロセス関連のログを取得する Java プログラムを作成しています。そのためには、特定の場所に作成された Java プロセスを取得する必要があります。Windows ボックスで、単一のコマンドまたは 1 行で渡せるコマンドの組み合わせを使用してこの情報を取得する方法を知る必要があります。
少し勉強して、PowerShell をオプションとして選択しました。2 つの個別の PowerShell コマンドを使用して結果を取得します。
Powershell
Get-Process java| where {$_.path -like 'D:\ptc\Windchill_11.0\Java\jre\bin\java.exe'}
しかし、この 2 つを組み合わせても、結果は得られません。
Powershell ; Get-Process java ^| where {$_.path -like 'D:/ptc/Windchill_11.0/Java/jre/bin/java.exe'}
これら 2 つを組み合わせるのを手伝ってくれる人はいますか? それとも PowerShell 以外のオプションはありますか?
答え1
つまり、あなたは PowerShell に非常に不慣れで、まだ習得に必要な時間を費やしていないため、推測していることになります。これは実際には役に立ちません。
徐々に学習を進めないと、不必要な混乱、フラストレーション、エラー、悪い習慣、誤解などが生じるだけです。そのため、少しずつ学習を進めて、そのような経験を減らしたり回避したりすることをお勧めします。それでも、どんな学習でも、ある程度の推測や実験は発生します。それが学習の本質だからです。;-}
Java 構文と PowerShell コードを混在させないでください。PowerShell には多くの予約語、変数があり、スクリプト、コマンド、.exe を実行するためにコードを構築する必要がある特定の方法があります。
PowerShellのセミコロンは、その行を1行にするものではありません。(パイプライン ワンライナー)。これは、同じ行にある 2 つの独立したコマンド/コード ブロックです。これはステートメント ターミネータです。
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 の名言 – 拡大するかしないか、それが問題だ
繰り返しになりますが、あなたは初心者なので、以下のことに必要な時間を費やしてください。
...そして、無償/無料リソース全てウェブ上で. MS TechNetのようにWindows PowerShell サバイバル ガイド。