Ich schreibe ein Java-Programm, das die prozessbezogenen Protokolle für eine Anwendung herausholt. Dazu muss ich die Java-Prozesse abrufen, die an einem bestimmten Ort erstellt wurden. Ich muss wissen, wie ich diese Informationen auf einer Windows-Rechner mit einem einzigen Befehl oder einer Kombination von Befehlen abrufen kann, die in einer einzigen Zeile übergeben werden können.
Ich habe ein bisschen recherchiert und bin schließlich zu PowerShell als Option gekommen. Das Ergebnis erhalte ich mit zwei separaten PowerShell-Befehlen:
Powershell
Get-Process java| where {$_.path -like 'D:\ptc\Windchill_11.0\Java\jre\bin\java.exe'}
Aber wenn ich beides kombiniere, erhalte ich kein Ergebnis:
Powershell ; Get-Process java ^| where {$_.path -like 'D:/ptc/Windchill_11.0/Java/jre/bin/java.exe'}
Kann mir jemand helfen, die beiden zu kombinieren, oder gibt es außer PowerShell eine andere Möglichkeit?
Antwort1
OK, das bedeutet, dass Sie noch sehr neu bei PowerShell sind und noch nicht die nötige Zeit investiert haben, um sich damit vertraut zu machen. Daher müssen Sie nur ein paar Vermutungen anstellen. Das hilft Ihnen nicht wirklich weiter.
Wenn Sie nicht richtig lernen, führt das nur zu unnötiger Verwirrung, Frustration, Fehlern, schlechten Angewohnheiten, Missverständnissen usw. Mein Vorschlag, sich richtig zu lernen, ist, dass Sie solche Erfahrungen reduzieren bzw. vermeiden können. Dennoch wird bei jedem Lernen auch ein wenig geraten bzw. experimentiert, denn das liegt in der Natur der Sache.;-}
Mischen Sie Java-Syntax nicht mit PowerShell-Code. PowerShell enthält viele reservierte Wörter und Variablen und erfordert bestimmte Methoden zum Erstellen von Code zum Ausführen von Skripts, Befehlen und EXE-Dateien.
Das Semikolon in PowerShell macht die Zeile nicht zu einem Einzeiler(Pipeline-Einzeiler). Das sind zwei separate, unabhängige Befehle/Codeblöcke in derselben Zeile. Es ist ein Anweisungsabschlusszeichen.
Sie müssen sich bereits in einer PowerShell-Sitzung befinden, bevor Sie PowerShell-Befehle ausführen können.
Also das...
Get-Process java| where {$_.path -like "D:\ptc\Windchill_11.0\Java\jre\bin\java.exe"}
… funktioniert, da Sie PowerShell offenbar bereits gestartet und diesen Befehl manuell eingegeben haben.
Das..
Powershell ; Get-Process java ^| where {$_.path -like 'D:/ptc/Windchill_11.0/Java/jre/bin/java.exe'} enter image description here
… schlägt fehl, weil Sie sich vor der Ausführung eines PowerShell-Befehls nicht in einer PowerShell-Sitzung befinden.
Sehen: PowerShell-Befehlszeilenhilfe
# 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
Also, Ihrs ist …
PowerShell -Command "Get-Process java ^ | where {$_.path -like 'D:/ptc/Windchill_11.0/Java/jre/bin/java.exe'}"
PowerShell: Ausführen von ausführbaren Dateien
Wenn Sie PowerShell verwenden, müssen Sie Folgendes verstehenZitierregelnist von größter Bedeutung.
PowerShell-Zitate – Erweitern oder nicht erweitern, das ist hier die Frage
Eine Geschichte über PowerShell-Zitatregeln
Da Sie neu sind, sollten Sie die nötige Zeit für Folgendes aufwenden:
...und nutze allekeine Kosten / kostenlose Ressourcenalleüber das Internet. Wie das MS TechNetWindows PowerShell-Überlebenshandbuch.