.png)
Ich habe Probleme, ein kleines Problem zu lösen. Für Prozesse kann ich ihren Namen anhand ihrer $PID mit der folgenden Zeile speichern:
$process_name=get-Process -id $PID |Auswahl -expand Name
Ich möchte den Prozess jedoch alsService. Ich möchte dieselbe Operation durchführen, das heißt: den Namen des Dienstes, z. B. [service_name].exe, in einer Variablen $service_name speichern.
Der Grund dafür ist, dass ich nur eine .ps1-Datei haben möchte, die ich dann in mehrere Dienste umwandeln kann, die jeweils ihre eigenen .exe.config-Dateien verwenden. So kann nur eine .ps1-Datei mehrfach in Dienste wie
[service1.exe, service2.exe, service3.exe, ...]
und jeder Dienst verwendet seine entsprechende .exe.config-Datei wie
[service1.exe.config, service2.exe.config, service3.exe.config, ...]
Gibt es eine Möglichkeit, dies mit Powershell zu tun?
Antwort1
Sie können die Serviceinformationen von Processid erhalten.
(Get-WmiObject Win32_Service -Filter "ProcessId='$PID'")
Antwort2
Mit Get-WmiObject können Sie die ausführbaren Dateien sammeln:
(Get-WmiObject win32_service | Where-Object -Property Name -Like *wallet*).PathName
In diesem Beispiel wird der Name der ausführbaren Datei zusammen mit allen Schaltern angezeigt. Wenn Sie dies in einer Variablen festhalten möchten, versuchen Sie Folgendes:
$proc_name = (Get-WmiObject win32_service | Where-Object -Property Name -Like *wallet*).PathName
Wenn Sie erweiterte Eigenschaftsinformationen benötigen, versuchen Sie Folgendes:
Get-WmiObject win32_service | ?{$_.Name -like '*wallet*'} | Select-Object -Property *
Antwort3
Hier ist eine andere Möglichkeit – die oben genannten könnten zuverlässiger sein?
$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