PowerShell में CMD कमांड चलाना


87

मैं चलाने के लिए एक PowerShell आदेश प्राप्त करने के साथ समस्याओं का एक गुच्छा रहा हूँ। यह सब वह कर रहा है जो एक कमांड चला रहा है जिसे सीएमडी प्रॉम्प्ट विंडो में चलाया जाएगा।

यहाँ आदेश है:

"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME

मैंने बिना किसी सफलता के साथ कोशिश की है (मैंने इसमें से कई पुनरावृत्तियों को आजमाया है और जो काम करता है उसे पाने के लिए। वाक्य रचना शायद सभी खराब है):

$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)

कमांड सिर्फ SCCM रिमोट कनेक्शन विंडो को खोलेगा, जिसे उपयोगकर्ता टेक्स्ट बॉक्स में निर्दिष्ट करता है।


मुझे यकीन नहीं है कि आप SCCM के किस संस्करण का उपयोग कर रहे हैं, लेकिन 07 के लिए "-1" की आवश्यकता होती है, लेकिन CmReViewer को लॉन्च करते समय 2012 की आवश्यकता नहीं है। बस एक FYI करें।
केविन_

जवाबों:


102

इसे इस्तेमाल करे:

& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME

PowerShell को एक स्ट्रिंग "..." केवल एक स्ट्रिंग है और PowerShell इसे स्क्रीन पर गूँज कर उसका मूल्यांकन करता है। PowerShell को कमांड निष्पादित करने के लिए जिसका नाम एक स्ट्रिंग में है, आप कॉल ऑपरेटर का उपयोग करते हैं &


बहुत बढ़िया, यह काम किया। कि सबसे cmd आदेशों के लिए काम करना चाहिए?
user3585839

4
हां, लेकिन यह जरूरी नहीं है कि उनके नाम या रास्ते में जगह न हो। उदाहरण के लिए, आप ipconfig.exeउपयोग किए बिना निष्पादित कर सकते हैं &। आपके द्वारा उपयोग किए जाने का एकमात्र समय &स्ट्रिंग रूप में एक कमांड नाम को लागू करना है। और आपको पथ या फ़ाइल नाम में जगह होने पर "स्ट्रिंग फॉर्म" का उपयोग करना होगा।
कीथ हिल

17
मैं जोड़ूंगा कि यह कमांड-लाइन स्ट्रिंग बनाने के लिए काम नहीं करेगा और इसके साथ निष्पादित करने का प्रयास करें &, क्योंकि PowerShell को लगेगा कि संपूर्ण स्ट्रिंग निष्पादन योग्य का नाम है। इसके बजाय केवल निष्पादन योग्य का नाम उद्धृत करें और निष्पादन योग्य मापदंडों को बाद में रखें।
Bill_Stewart

के बीच अंतर क्या है &और cmd?
टिमो

1
&पॉवरशेल कॉल (उर्फ आह्वान) ऑपरेटर है। यह आपको एक कमांड निष्पादित करने की अनुमति देता है जब आपके पास एक स्ट्रिंग होती है जिसमें या तो कमांड का नाम या एक्सई का रास्ता होता है। आप एक स्क्रिप्टब्लॉक उदा &{$foo=42}या कमांडइनो ऑब्जेक्ट उदा जैसे भी निर्दिष्ट कर सकते हैं $cmd = Get-Command Get-Date; &$cmdcmdएक अलग खोल है। ध्यान दें कि &एक बच्चे के दायरे में निष्पादित होता है, इसलिए आप ध्यान देंगे कि स्क्रिप्टब्लॉक के बाद जो फिनिश से $fooऊपर सेट होता है, $fooअब सेट नहीं किया गया है।
कीथ हिल

56

PowerShell से बैच फ़ाइलों को बाहरी रूप से चलाने या परिवर्तित करने के लिए (विशेषकर यदि आप अपने सभी निर्धारित कार्य स्क्रिप्ट को प्रमाण पत्र के साथ साइन इन करना चाहते हैं) तो मैं बस एक PowerShell स्क्रिप्ट बनाता हूं, जैसे deletefolders.ps1।

स्क्रिप्ट में निम्नलिखित इनपुट करें:

cmd.exe /c "rd /s /q C:\#TEMP\test1"

cmd.exe /c "rd /s /q C:\#TEMP\test2"

cmd.exe /c "rd /s /q C:\#TEMP\test3"

* प्रत्येक कमांड को फिर से cmd.exe कॉल करने वाली एक नई लाइन पर डालने की आवश्यकता होती है।

यह स्क्रिप्ट अब साइन की जा सकती है और कमांड को प्रॉम्प्ट / cmdसीधे कमांड करने के लिए पावरशेल से रन कर सकती है ।

यह बैच फ़ाइलों को चलाने की तुलना में बहुत सुरक्षित तरीका है!


यह मेरे लिए बहुत अच्छा काम किया। मैं चलाने की कोशिश कर रहा था: sc query serviceNameपावरशेल से यह सोचकर कि यह निष्पादित होगा, लेकिन कोई आउटपुट नहीं। मैंने & amp; तकनीक के कई पुनरावृत्तियों की कोशिश की, कोई पासा नहीं। लेकिन इसे चलाने के लिए जिस तरह से आपने सिफारिश की थी वह काम कर रहा है। अगले मैं cmd.exe / मारा? यह देखने के लिए कि अन्य अजूबों ने मेरा क्या इंतजार किया। मुझे केवल जरूरत पड़ने पर सीएमडी चलाना पसंद है।
पॉल मैस्क

9

एक उपाय यह होगा कि पावरशेल से सीएमडी तक आपकी कमांड को पाइप किया जाए । निम्नलिखित कमांड को चलाने से कमांड notepad.exeको सीएमडी पर पाइप किया जाएगा, जो फिर नोटपैड एप्लिकेशन को खोलेगा।

PS C:\> "notepad.exe" | cmd

एक बार कमांड सीएमडी में चला गया है, तो आपको पावरशेल प्रॉम्प्ट पर लौटा दिया जाएगा, और अपनी पॉवरशेल स्क्रिप्ट को चलाना जारी रख सकते हैं।


संपादित करता

CMD का स्टार्टअप संदेश दिखाया जाता है

जैसा कि mklement0 बताता है, यह विधि CMD के स्टार्टअप संदेश को दिखाती है। यदि आप किसी अन्य टर्मिनल में ऊपर विधि का उपयोग करके आउटपुट की प्रतिलिपि बनाने के लिए थे, तो स्टार्टअप संदेश को इसके साथ कॉपी किया जाएगा।


यह तब भी काम कर सकता है जब &वह नहीं करता है। जैसे & "mklink"काम करने के दौरान ईजी ने मेरे लिए काम नहीं "mklink" | cmdकिया
मौडरिक

2

उन लोगों के लिए जिन्हें इस जानकारी की आवश्यकता हो सकती है:

मुझे लगा कि आप एक बहुत ही कमांड चला सकते हैं जो आपके PATHपीएस स्क्रिप्ट से है, और यह काम करना चाहिए।

कभी-कभी आपको इस कमांड को प्री-लॉन्च करना पड़ सकता है cmd.exe /c

उदाहरण

पीएस स्क्रिप्ट से कॉलिंग गिट

मुझे एक gitग्राहक को लपेटना पड़ा Chocolatey(जो नहीं जानता हो सकता है, यह विंडोज़ के लिए एक तरह का ऐप-स्टोर है) जो बड़े पैमाने पर पीएस स्क्रिप्ट का उपयोग करता है।

मुझे पता चला है कि, एक बार gitमें है PATH, जैसे आज्ञा

$ca_bundle = git config --get http.sslCAInfo

चर git crtमें फ़ाइल का स्थान संग्रहीत करेगा $ca_bundle

एक ऐप की तलाश में

एक अन्य उदाहरण जो वर्तमान SO पोस्ट का संयोजन है और यह SO पोस्टwhere कमांड का उपयोग है

$java_exe = cmd.exe /c where java

चर java.exeमें फ़ाइल का स्थान संग्रहीत करेगा $java_exe


1
आपको केवल cmd /cइसके आंतरिक आदेशों को लागू करने की आवश्यकता है , जैसे कि mklink। इसके विपरीत, where.exeएक बाहरी कार्यक्रम है, इसलिए आप इसे सीधे लागू कर सकते हैं। हालाँकि, PowerShell के अंतर्निहित whereउपनाम (के लिए Where-Object) के साथ एक नाम संघर्ष के कारण , आपको उपयोग करना चाहिए where.exe; जैसे, where.exe java
mklement0

या सिर्फ Get-Commandकॉल करने के बजाय पावरशेल का उपयोग करें cmd? पहले जैसा ही:$java_exe = $(Get-Command java.exe).Source
dtasev

-1

इस बाहरी प्रोग्राम को लॉन्च करने के लिए आपको इनवोक-कमांड cmdlet का उपयोग करना होगा। आम तौर पर यह एक प्रयास के बिना काम करता है।

यदि आपको एक से अधिक कमांड की आवश्यकता है, तो आपको -scriptblockविकल्प के साथ Invoke-Expression cmdlet का उपयोग करना चाहिए ।


1
इस मामले में इनवोक-कमांड की जरूरत नहीं है (देखें कीथ हिल का जवाब)।
Bill_Stewart

हां मैं इससे सहमत हूं। मैं पटकथा समाधान के बारे में अधिक सोच रहा था।
टिम क्रिस्टीन

4
इससे कोई फर्क नहीं पड़ता कि कमांड स्क्रिप्ट से चलाया जाता है या नहीं। इस मामले में अभी भी इनवोक-कमांड का उपयोग करना आवश्यक नहीं है।
Bill_Stewart


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