2013-07-10 18 views
38

ví dụ: nếu tôi chạy notepad.exe c:\autoexec.bat,Làm thế nào để có được thông tin chỉ huy của đường cho một quá trình trong PowerShell hoặc C#

Làm thế nào tôi có thể nhận được c:\autoexec.bat trong Get-Process notepad trong PowerShell?

Hoặc làm cách nào tôi có thể nhận được c:\autoexec.bat trong Process.GetProcessesByName("notepad"); trong C#?

+0

có lẽ đây sẽ giúp bạn: [Làm thế nào để có được các thông số dòng lệnh từ một quá trình khác nhau] (http://social.msdn.microsoft.com/Forums/en-US/8efe163b -927e-4895-9983-b8c47b515d7c/how-to-get-the-command-line-tham số-từ-a-khác-quy trình-in-c) – Corak

+0

không rõ ràng. bạn có thể chỉ rõ rõ hơn chính xác bạn đang cố gắng làm gì không? @victorwoo – Rezoan

+1

Vui lòng lùi lại một bước và mô tả vấn đề thực tế bạn đang cố gắng giải quyết thay vì những gì bạn cảm nhận là giải pháp. –

Trả lời

74

Trong PowerShell bạn có thể nhận được các dòng lệnh của một quá trình thông qua WMI:

$process = "notepad.exe" 
Get-WmiObject Win32_Process -Filter "name = '$process'" | Select-Object CommandLine 

Lưu ý rằng bạn cần phải đặc quyền quản trị để có thể truy cập thông tin về tiến trình đang chạy trong bối cảnh của một người dùng khác. Là người dùng bình thường, nó chỉ hiển thị cho bạn đối với các quy trình đang chạy trong ngữ cảnh của riêng bạn.

+1

Nó hoạt động, cảm ơn bạn. – victorwoo

+4

Có một khía cạnh quyền đối với điều này. Quá trình Powershell cần phải có quyền ít nhất là tương đương với quá trình đích. Vì vậy, phiên Powershell thường xuyên sẽ không thể nhận được thông tin như vậy cho một quy trình đang chạy cao (ví dụ như Quản trị viên). trong trường hợp này, CommandLine (phản hồi) sẽ được để trống. – CJBS

+2

@CJBS Để chính xác, bạn cần đặc quyền quản trị để có thể truy cập thông tin đó về các quy trình đang chạy trong ngữ cảnh của người dùng khác. Là người dùng bình thường, nó chỉ hiển thị cho bạn đối với các quy trình đang chạy trong ngữ cảnh của riêng bạn. –

1

Câu trả lời này là tuyệt vời, tuy nhiên cho futureproofing và làm tương lai bạn một đặc ân, trừ khi bạn đang sử dụng PowerShell khá cũ (trong trường hợp này tôi khuyên bạn nên một bản cập nhật!) Get-WmiObject đã được thay thế bởi Get-CimInstance Hey Scripting Guy reference

Hãy thử điều này

$process = "notepad.exe" 
Get-CimInstance Win32_Process -Filter "name = '$process'" | select CommandLine