PowerShell से एक चर में संग्रहीत एक कमांड को निष्पादित करना


152

मेरे पास एक कमांड है जिसे मैंने PowerShell में एक चर में बनाया और संग्रहीत किया है। यह कमांड काम करता है अगर मैं एक राइट-होस्ट करता हूं और एक मानक cmd.exeविंडो में कॉपी और पेस्ट करता हूं ।

मैं अपनी स्क्रिप्ट के अंदर से इस कमांड को कैसे निष्पादित करूं?

मैंने बिना किसी भाग्य के Invoke-Command या Invoke-Expression के कई संयोजन आज़माए हैं।

यह है कि मैंने चर कैसे बनाया:

$cmd1 = $arcprg + $arcdir + "\" + $site1 + "-" + $hst + "-" + $yesterday + ".zip " + $logpath1 + "u_ex" + $yesterday + ".log"

यह वैसा ही है जैसा कि स्क्रीन पर मुद्रित होने पर वैरिएबल दिखता है:

7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log

जवाबों:


207

यहां अभी तक एक और तरीका नहीं है Invoke-Expressionलेकिन दो चर (कमांड: स्ट्रिंग और पैरामीटर: सरणी) के साथ। यह मेरे लिए ठीक काम करता है। मान लें 7z.exeकि सिस्टम पथ में है।

$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& $cmd $prm

यदि कमांड ज्ञात है (7z.exe) और केवल पैरामीटर परिवर्तनशील हैं तो यह होगा

$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& 7z.exe $prm

BTW, Invoke-Expressionमेरे लिए एक पैरामीटर काम करता है, जैसे, यह काम करता है

$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'

Invoke-Expression $cmd

पुनश्च मैं आमतौर पर एक पैरामीटर सरणी के साथ रास्ता पसंद करता हूं क्योंकि प्रोग्रामेटिक रूप से रचना करना आसान होता है, जिसके लिए एक अभिव्यक्ति का निर्माण होता है Invoke-Expression


यह बहुत बढ़िया बात है। अब एक साथ आना शुरू हो रहा है। इसके बजाय 'c: \ temp \ के साथ space \ test1.zip' मैं सिर्फ एक $ चर का उपयोग कर सकता हूं? क्या मुझे इसे लगाने की आवश्यकता है "" या ''?
ट्रैविस

Splatting काम करने के लिए लगता है एक ही: & $ cmd @prm लेकिन मैं ऐसा क्यों है के बारे में उत्सुक हूँ
C2H5OH

44

इसके साथ अपने आदेश को लागू करने का प्रयास करें Invoke-Expression:

Invoke-Expression $cmd1

यहाँ मेरी मशीन पर एक कार्यशील उदाहरण है:

$cmd = "& 'C:\Program Files\7-zip\7z.exe' a -tzip c:\temp\test.zip c:\temp\test.txt"
Invoke-Expression $cmd

iexआप ऐसा कर सकते हैं के लिए एक उपनामInvoke-Expression है:

iex $cmd1

पूरी सूची के लिए: अधिक सामान के लिए https://ss64.com/ps/ पर जाएंPowershell

शुभ लाभ...


मुझे बताता है कि शब्द '7z.exe a -tzip c: \ arc_logs \ site-host-at-web1-100827.zip c: \ inetpub \ log \ logfiles \ w3svcp \ u_ex100827.log' के रूप में मान्यता नहीं है cmdlet, function, script फाइल या ऑपरेबल प्रोग्राम। नाम की वर्तनी की जाँच करें, या यदि कोई पथ शामिल किया गया था, तो सत्यापित करें कि पथ सही है और पुन: प्रयास करें। At: लाइन: 14 char: 1 + और <<<< $ cmd1
ट्रैविस

@Travis: उफ़। यदि कोई आर्गन्स नहीं है तो एम्परसेंड काम करता है। मैंने आपकी कमांड के समाधान के साथ पोस्ट को अपडेट किया।
kbrimington

मैंने पहले भी आह्वान-अभिव्यक्ति की कोशिश की है और यह काम नहीं किया है। यह त्रुटि को समाप्त करता है: ख़राब संख्यात्मक स्थिरांक: 7. At: पंक्ति: 1 char: 2 + 7z <<<< .exe a -tzip c: \ arc_logs \ site-host-at-web1-100827.zn c: \ inetpub \ log \ logfiles \ w3svc1 \ u_ex100827.log यह लगभग ऐसा लगता है कि यह इसे निष्पादित करने के बजाय इसका मूल्यांकन करने की कोशिश कर रहा है।
ट्रैविस

@ ट्राविस: ऐसा हो सकता है कि 7z.exe आपके रास्ते पर नहीं है। सत्यापित करें कि यह पथ पर है और / या अपनी अभिव्यक्ति में निष्पादन योग्य को पूरा पथ नाम देने का प्रयास करें।
kbrimington

1
@Travis: मैंने अभी अपने सिस्टम पर पुष्टि की है कि 7z.exe ने आपके द्वारा बताई गई त्रुटि दी है, बस कमांड प्रॉम्प्ट से टाइपिंग है, लेकिन 7z.exe के लिए पूर्ण पथ के साथ (मेरे लिए, यह था 'C:\Program Files\7-zip\7z.exe', मैं 7z.exe निष्पादित कर सकता था ।
kbrimington
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.