2016-04-29 3 views
5

मैं एक पाठ को फ़ाइल में बदलने के लिए Windows कमांड प्रॉम्प्ट के माध्यम से PowerShell कमांड लॉन्च करने का प्रयास कर रहा हूं। समस्या यह है कि जब भी मेरा PowerShell कमांड काम नहीं कर रहा है तब भी मुझे त्रुटिLevel = 0 मिल रहा है। मेरा प्रश्न है कि जब मैं PowerShell को cmd के माध्यम से लॉन्च करता हूं तो त्रुटि त्रुटि में त्रुटि कोड कैसे प्राप्त करें? कृपया ध्यान दें कि मैं इसे विंडोज कमांड प्रॉम्प्ट के माध्यम से बनाना चाहता हूं, न कि एक स्क्रिप्ट को एक हिस्सा बनाकर।PowerShell से त्रुटि आदेश (त्रुटिLevel) को Windows कमांड प्रॉम्प्ट में कैसे प्राप्त करें?

यहां मैं जो कह रहा हूं उसका एक उदाहरण है। प्रिंट स्क्रीन में त्रुटि आपको यह दिखाने के लिए जानबूझकर बनाई गई है कि त्रुटि होने पर भी, त्रुटिLevel 0.

मैं जिस कमांड का उपयोग कर रहा हूं वह निम्न है (मैंने $LastExitCode को आजमाया है और $ExitCode):

powershell -NonInteractive -NoProfile -Command "(Get-Content HvsvmAppserver.ref) -replace '-Dfr.base0.role=', '-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref; exit $LastExitCode" 

लेकिन मैं यह भी साथ एक ही करने की कोशिश की:

powershell -NonInteractive -NoProfile -Command "(Get-Content HvsvmAppserver.ref) -replace '-Dfr.base0.role=', '-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref; exit $ExitCode" 

majkinetor की टिप्पणी के आधार पर, मैंने कोशिश की निम्नलिखित और के रूप में अच्छी तरह से काम नहीं किया है :(, मैं एक मैं डॉस में ErrorLevel 0 प्राप्त करता रहता हूं जब भी Powerhell में कोई त्रुटि होती है।

powershell -noprofile -command " try { (Get-Content HvsvmAppserver.ref) -replace '-Dfr.base0.role=', '-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref } catch {exit $LastExitCode}" 

आप स्पष्ट रूप से फ़ाइल नाम है कि यह अस्तित्व में नहीं है से संबंधित कोई त्रुटि दिखाई दे सकते हैं, लेकिन त्रुटि स्तर हमेशा 0.

है मैं क्या चाहता हूँ एक त्रुटि के अलावा अन्य कोड प्राप्त करने के लिए है PowerShell कमांड निष्पादित करते समय होने वाली प्रत्येक त्रुटि के लिए 0।

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

Error 2

+0

cmd.exe प्रॉम्प्ट से 'powerhell.exe ... 'न चलाएं। बस 'पीएस सी: \>' पावरशेल प्रॉम्प्ट से सीधे आदेश चलाएं। –

+0

आपकी छवियों में से कोई भी आवश्यक नहीं था (आप कमांड विंडो से टेक्स्ट कॉपी कर सकते हैं), और वे निश्चित रूप से इतने बड़े होने के लिए फसल नहीं हो सकते थे। काला खाली क्षेत्र में से कोई भी प्रासंगिक या आवश्यक नहीं है, और मोबाइल डिवाइस पर इस पोस्ट को पढ़ने वाला कोई भी व्यक्ति आपके साथ खुश नहीं है। छवियों को केवल तभी पोस्ट किया जाना चाहिए जब इस मुद्दे को स्पष्ट करने का कोई अन्य तरीका न हो। [यह मेटा पोस्ट] देखें (http://meta.stackoverflow.com/a/285557/62576) उन कई कारणों की सूची के लिए जिन्हें आप उनसे बचना चाहिए। –

+1

@ बिल_स्टवार्ट, जब हम किसी सहायता के लिए पूछते हैं, तो उसे किसी और चीज़ के बारे में उत्तर नहीं मिलता है ...आपकी टिप्पणी बिल्कुल उपयोगी नहीं थी..यदि मैं इसे एक अलग तरीके से बनाना चाहता था, तो मैं अपने प्रश्न – JustGreat

उत्तर

3

cmd.exe खोल में इस कोड का प्रयास करें:

C:> powershell -noprofile -command " try { 1/0 } catch {exit 22}" 

C:> echo %errorlevel% 
22 

तो, कोशिश ब्लॉक में अपने आदेश में जोड़ें। यदि ऐसा होता है कि आप non powershell कमांड को कॉल करते हैं तो आप exit $LastExitCode (लेकिन कोशिश ब्लॉक के भीतर से) कर सकते हैं।


संपादित

ठीक है, मुझे पता है कि अपने गैर काम कोड के साथ हो रहा है, यह के रूप में गर्त कैच ब्लॉक पारित कर दिया कभी नहीं मिल-सामग्री non-terminating error पैदा करता है।आप इस बारे में देखभाल करने के लिए है:

C:> Powershell -Command "try { (Get-Content HvsvmAppserver.ref -ea stop) -replace '-Dfr.base0.role=', '-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref -ea stop } catch {$_; exit 123 }" 

Get-Content : Cannot find path 'C:\Users\majkinetor\HvsvmAppserver.ref' because it does not exist. 
At line:1 char:8 
+ try { (Get-Content HvsvmAppserver.ref -ea stop) -replace '-Dfr.base0. ... 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (C:\Users\majkinetor\HvsvmAppserver.ref:String) [Get-Content], ItemNotFoundException 
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand 

C:> echo %errorlevel% 
123 

सूचना -ea stop है कि मैं दोनों आदेशों को जोड़ा गया (कम तो ErrorAction)। मेरा समाधान पहली बार सही था, हालांकि, आपको यह समझने की आवश्यकता है कि स्क्रिप्ट को भी सही ढंग से डिजाइन किया जाना चाहिए। आप इसके बजाय trap का उपयोग भी करना चाहते हैं, लेकिन आपको अभी भी ईए स्टॉप का उपयोग करना होगा। शायद कम से कम सामान्य समाधान है कि एक स्क्रिप्ट पर बहुत अधिक निर्भर नहीं करता है:

$ErrorActionPreferance = 'Stop' 
    <your script goes here, no need for -ea stop in it> 
    trap { exit 123 } 

यह अगर सवाल में स्क्रिप्ट में परिवर्तन $ErrorActionPreference काम करेंगे नहीं (जो शायद ही कभी होता है), लेकिन अन्य सभी मामलों में काम करेंगे।

+0

बहुत बहुत धन्यवाद, मैं कल काम पर कोशिश करूंगा और अगर आपको हल हो जाए या नहीं तो मुझे बताएगा। – JustGreat

+0

डुनो अगर मुझे यह अच्छा लगे, लेकिन मैंने कोशिश की और त्रुटि स्तर 0 प्राप्त करना जारी रखा ... यहां वह आदेश है जिसका मैंने उपयोग किया था। पावरहेल-नोप्रोफाइल-कमांड "कोशिश करें {(Get-content HvsvmAppserver.ref) -replace '-Dfr.base0.role =', '-Dfr.base0.role = USR_ROLE' | सेट-सामग्री -कोडिंग ASCII HvsJvmAppserver.ref } पकड़ें {निकालें $ LastExitCode} " – JustGreat

+0

मैंने यह भी कोशिश की (यहां तक ​​कि अगर मैं एक कूजटॉम त्रुटि नहीं चाहता) और मुझे त्रुटि मिल रहा है 0 .... उन लोगों को डैनो जिन्होंने आपके जवाब में +2 वोट दिया है, अगर उन्होंने इसका परीक्षण किया है या बस परीक्षण किए बिना मतदान किया ... शक्तियां -noprofile -command "कोशिश करें {(Get-content HvsvmAppserver.ref) -replace '-Dfr.base0.role =', '-Dfr.base0.role = USR_ROLE' सेट करें -कंटेंट -कोडिंग ASCII HvsJvmAppserver.ref} पकड़ें {निकास 12345} " – JustGreat

0

तो एक जवाब मेरी टिप्पणी के आधार पर के रूप में इस डाल करने के लिए:

आप शून्य हो रही है क्योंकि उस मूल्य आप गुजर रहे हैं। यदि आप अपने चरों में से किसी एक का उपयोग करना चाहते हैं, तो आपके पास पर निकास कोड के रूप में कुछ सेट करें।

करने के लिए जो आप जवाब दिया:

@ShawnMelton धन्यवाद, लेकिन मैं यह अच्छी तरह से नहीं मिल है .... मैं अपने ही त्रुटि कोड या personnalized त्रुटि प्रबंधन करने के लिए नहीं चाहता! मैं चाहता हूं कि है कि जब मेरी शक्तिशक्ति (कोड, स्क्रिप्ट इत्यादि ...) में कोई त्रुटि आई, डॉस के त्रुटि स्तर को यह त्रुटि कोड मिलता है (मैं अपना स्वयं कोड नहीं बनाना चाहता)। क्या आप एक कोड द्वारा चित्रित कर सकते हैं जिसका मतलब है? मेरे पास आपकी टिप्पणी नहीं समझ सकता है? से आपकी तरफ से अच्छा प्रदर्शन करने की कोशिश करने के लिए धन्यवाद।

होने के नाते है कि आप powershell.exe बुला रहे हैं यह शून्य के रूप में, एक निकास कोड कमांड प्रॉम्प्ट पर वापस जाने के लिए जा रहा है हमेशा (0)। यदि आप PowerShell कोड को गलत करते हैं तो यह हमेशा शून्य होगा। powershell.exe स्वयं आपके द्वारा पारित किए गए किसी भी आदेश को सफलतापूर्वक निष्पादित कर रहा है, इसलिए जब तक निष्पादन योग्य स्वयं किसी कारण से त्रुटियों को न हो, तो आप हमेशा शून्य प्राप्त करते हैं। यदि आप शून्य से कुछ और वापस करने के लिए PowerShell.exe चाहते हैं तो आपको अपने PowerShell कमांड में exit xx का उपयोग करने की आवश्यकता है, जहां xx एक पूर्णांक है। enter image description here

कमांड प्रॉम्प्ट से PowerShell को कॉल करने का प्रयास न करने का बिंदु अभी भी खड़ा है, चाहे आप इसे यहां देखना चाहते हैं या नहीं। आपको गारंटी नहीं है कि exit 99 जैसे कुछ का उपयोग करने से निष्पादन योग्य लौटने वाले शून्य को हमेशा ओवरराइट करने जा रहा है ... यह वही तरीका है जो यह काम करता है। जब मैंने विंडोज़ 10 के साथ अपने लैपटॉप पर कोशिश की तो मुझे कई नतीजे मिले। मैं कह सकता हूं कि मैंने एसएसआईएस पैकेज से पावरशेल स्क्रिप्ट को कॉल करने के लिए उत्पादन में पहले तकनीक का उपयोग किया है, और इस उद्देश्य को पूरा किया। हालांकि उस स्थिति में मैं इसे बैच फ़ाइल से नहीं बुला रहा था, इसलिए यह उम्मीद के अनुसार काम करता था।

+0

@ शवान मेलटन, बहुत बहुत धन्यवाद। अब मैं समझता हूं कि मेरे पास हमेशा क्यों है 0. फिर भी दूसरा भाग जिसे मैं समझ नहीं पा रहा हूं, यही कारण है कि अगर मैं 99 से बाहर निकलता हूं, तो मुझे 99 नहीं मिलेगा? क्या आप कृपया मुझे अपने उत्तर के दूसरे भाग को फिर से स्पष्ट करेंगे? क्योंकि मैं डॉस के माध्यम से ऐसा क्यों कर रहा हूं, ऐसा इसलिए है क्योंकि मेरी कंपनी में उनके पास बहुत लंबा है। सीएमडी, और अगर मैं कुछ भी संशोधित करना चाहता हूं तो मुझे इस .cmd का उपयोग करने के लिए बाध्य किया गया है और बाहरी स्क्रिप्टिंग आदि नहीं लिख सकता ... ओथवाइज मैं ऐसा कर सकता था जो मैं एक .vbs का उपयोग करना चाहता था, लेकिन हमारे पास नियम जटिल हैं और मैं जो कुछ भी चाहता हूं वह नहीं कर सकता, मैं इसे अद्वितीय में करने के लिए बाध्य हूं। Cmd – JustGreat

+0

कमांड प्रॉम्प्ट (डॉस) के माध्यम से PowerShell स्क्रिप्ट निष्पादित करता है गारंटी नहीं है कि आप निकास कोड को शून्य के अलावा कुछ भी बदलने के लिए बदल सकते हैं। –

+0

तो निष्कर्ष निकालने के लिए मैं जो भी चाहता हूं वह नहीं कर सकता, या इसे स्पष्ट करने के लिए, मैं इसे कर सकता हूं, लेकिन मैं संभावित त्रुटियों को प्रबंधित करने की गारंटी नहीं दे सकता ... क्या मुझे इस बार अच्छा लगा? :) – JustGreat

संबंधित मुद्दे