विंडोज पर एक पीआईडी ​​को देखते हुए - मुझे कमांड लाइन निर्देश कैसे मिल सकता है जिसने इसे निष्पादित किया है?


26

एक डेटाबेस पर, मैं वर्तमान में चल रही सभी प्रक्रियाओं की सूची प्राप्त कर सकता हूं, और एसक्यूएल कमांड जिसने उन्हें लात मारी।

मैं एक विंडो बॉक्स पर एक समान काम करना चाहता हूं।

मैं प्रक्रियाओं की सूची प्राप्त कर सकता हूं, लेकिन कमांड लाइन नहीं जो उन्हें बंद कर देती है।

मेरा सवाल है: विंडोज पर एक पीआईडी ​​दिया गया - मुझे कमांड लाइन निर्देश कैसे मिल सकता है जिसने इसे निष्पादित किया है?

मान्यताओं:

  • विंडोज 7 और समकक्ष सर्वर

जवाबों:


35

पॉवर्सशेल और डब्ल्यूएमआई।

Get-WmiObject Win32_Process | Select ProcessId,CommandLine

या

Get-WmiObject -Query "SELECT CommandLine FROM Win32_Process WHERE ProcessID = 3352"

ध्यान दें कि किसी प्रक्रिया के बारे में इस जानकारी तक पहुंचने के लिए आपके पास अनुमति होनी चाहिए। इसलिए यदि आप जिस प्रक्रिया के बारे में जानना चाहते हैं वह विशेषाधिकार के संदर्भ में चल रही है, तो आपको कमांड को व्यवस्थापक के रूप में चलाना पड़ सकता है।


मुझे लगता है कि यह रास्ता काट रहा है - क्या इसके आसपास कोई रास्ता है?
हॉकआई

1
@Hawkeye | FLकमांड के अंत में जोड़ने का प्रयास करें । यह मेरे लिए कमांड लाइन के सभी विस्तार करता है। साथ ही खेलना चाह सकते हैं| Select -ExpandProperty CommandLine
रयान रीज़

दिलचस्प बात यह है कि आपको यह जानकारी देशी गेट-प्रोसेस cmdlet से नहीं मिल सकती है।
डेविड जुआन

3
गेट-प्रोसेस system.diagnostics.process वर्ग का उपयोग करता है जिसके पास वह संपत्ति नहीं है। गेट-प्रोसेस के लिए मदद भी प्रक्रिया ऑब्जेक्ट प्राप्त करने के लिए wmi का उपयोग करने का एक उदाहरण है
जिम बी

2
यह ध्यान देने योग्य है कि किसी अन्य प्रक्रिया की कमांड लाइन प्राप्त करने का आधिकारिक रूप से समर्थित तरीका नहीं है। जबकि एक स्ट्रिंग प्राप्त करने के तरीके हैं जो कर सकते थे जो कमांड लाइन सकती है, यह ऑपरेटिंग सिस्टम द्वारा गारंटी नहीं है और परिणाम आप सभी के लिए "चिकन चिकन चिकन" हो सकता है।
निक

21

आप WMI सबसिस्टम का उपयोग कर सकते हैं, इस जानकारी को प्राप्त करने के लिए WMIC.EXE का उपयोग कर सकते हैं। 600 की एक पीआईडी ​​मानकर:

wmic.exe path Win32_Process where handle='600' get name, commandline  /format:list

आप नाम, या प्रक्रिया की अन्य विशेषता के लिए भी खोज कर सकते हैं। सभी विशेषताओं को सूचीबद्ध करने के लिए इस कमांड का उपयोग करें:

wmic.exe path Win32_Process get  /format:list

1
यह आसान है; आप processइसके बजाय उपनाम के साथ थोड़ा छोटा कर सकते हैं path Win32_Process; उदाहरण के लिए, wmic.exe process get
mklement

15

अन्य उत्तर निश्चित रूप से अच्छे विकल्प हैं जो आपकी कमांड लाइन प्रकृति के कारण स्वचालित प्रणाली में आपकी अच्छी तरह से सेवा करेंगे (और मैं उस टैग से देखता हूं जो आप चाहते थे)। बेशक, कुछ लोग इस तरह की जानकारी को जीयूआई के साथ तलाशना चाहते हैं, इसलिए यहां उन लाइनों के साथ एक विकल्प हो सकता है।

प्रोसेस एक्सप्लोरर Microsoft द्वारा बनाए रखा गया एक Sysinternals टूल है। यह प्रक्रिया के गुण संवाद में प्रक्रिया की कमांड लाइन के साथ-साथ इसे लॉन्च करने वाले माता-पिता को भी प्रदर्शित कर सकता है, हालांकि उस प्रक्रिया का नाम अब उपलब्ध नहीं हो सकता है। यहाँ प्रक्रिया गुण संवाद है:

प्रक्रिया गुण संवाद

यदि आप प्रक्रिया शुरू करते समय और किन शर्तों के तहत अधिक विस्तृत ऑडिट ट्रेल चाहते हैं, तो आप प्रक्रिया मॉनिटर नामक एक अन्य Sysinternals टूल की ओर मुड़ सकते हैं। यहां आप "प्रोसेस शुरू" घटनाओं के लिए फ़िल्टर कर सकते हैं, उस प्रक्रिया के लॉन्च होने वाले पर्यावरण के बारे में जानें और देखें कि उस समय के आसपास क्या अन्य घटनाएं घट रही थीं। यह काफी शक्तिशाली कार्यक्रम है। यहाँ घटना गुण संवाद है:

घटना गुण संवाद


10
या बस PID और "कमांड लाइन" दिखाने के लिए टास्क मैनेजर पर कॉलम बदलें। और हो गया।
इस्माईल मिगुएल

@IsmaelMiguel टास्क मैनेजर में कमांड लाइन कॉलम वास्तव में लंबे तर्क तार काटता है, पता नहीं है कि क्या प्रक्रिया एक्सप्लोरर करता है
SD

@JGinSD मैंने कभी कोई छोटा तर्क नहीं देखा है।
इस्माइल मिगुएल

1
@IsmaelMiguel लगता है कि सीमा रेखा स्तंभ के लिए सीमा लगभग 200 अक्षर है
JG में SD

1
टास्क मैनेजर में वास्तविक सीमा 259 वर्ण है। (विंडोज 10 पर सत्यापित)। टास्क मैनेजर का एक फायदा है, हालांकि: यह आपको अन्य उपयोगकर्ताओं की कमांड लाइनों को दिखाता है / उन्नत प्रक्रियाएँ तब भी जब यह बिना किसी उन्नयन के चलती है (व्यवस्थापक के रूप में नहीं)। जबकि प्रोसेस एक्सप्लोरर और प्रोसेस मॉनिटर में 259-कैरेक्टर की सीमा नहीं है, क्योंकि v16.22 के रूप में वे बहुत लंबी कमांड लाइनों के साथ हैंग कर सकते हैंCommand Line यदि आप उस कॉलम पर माउस रखते हैं तो कॉलम को जोड़ा गया है।
22

1

पैरामीटर के माध्यम से एक छोटे विकल्प के साथ रेयान रीज़ के सहायक पावरशेल उत्तर को पूरक करने के लिए जो कि पदावनत-के बाद से v3 cmdlet के बजाय भी उपयोग करता है-FilterGet-CimInstanceGet-WmiObject

# Target a process by its PID (process ID) and report its command line, 
# using the PowerShell session's own PID as an example ($PID).
(Get-CimInstance Win32_Process -Filter "ProcessId=$PID").CommandLine

# Alternatively, target process(es) by name (may return multiple processes), 
# using Notepad.exe as an example.
# Select-Object is used to report both the PID and the command line.
Get-CimInstance Win32_Process -Filter "Name='Notepad.exe'" |
  Select-Object ProcessId, CommandLine

-Filterपैरामीटर अनिवार्य रूप से आप पारित करने के लिए अनुमति देता है WHEREएक के खंड WQL माध्यम से एक पूर्ण क्वेरी बयान गुजर के बजाय बयान -Query

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.