एंडी ने मुझे कुछ अच्छे पॉइंटर्स दिए, लेकिन मैं इसे एक साफ तरीके से भी करना चाहता था। उल्लेख नहीं है कि 2>&1 >>
विधि के साथ PowerShell ने मुझे किसी अन्य प्रक्रिया द्वारा लॉग फ़ाइल के उपयोग के बारे में शिकायत की है, यानी, दोनों stderr और stdout फ़ाइल को एक्सेस के लिए लॉक करने का प्रयास कर रहा है, मुझे लगता है। तो यहां मैंने इसे कैसे काम किया है।
पहले के एक अच्छा फ़ाइल नाम उत्पन्न करते हैं, लेकिन यह वास्तव में सिर्फ पंडिताऊ होने के लिए है:
$name = "sync_common"
$currdate = get-date -f yyyy-MM-dd
$logfile = "c:\scripts\$name\log\$name-$currdate.txt"
और यहाँ है जहां चाल शुरू होता है:
start-transcript -append -path $logfile
write-output "starting sync"
robocopy /mir /copyall S:\common \\10.0.0.2\common 2>&1 | Write-Output
some_other.exe /exeparams 2>&1 | Write-Output
...
write-output "ending sync"
stop-transcript
start-transcript
साथ
और stop-transcript
आप सभी उत्पादन अनुप्रेषित कर सकते हैं PowerShell एक फ़ाइल को आदेश देता है, लेकिन it doesn't work correctly with external commands। तो आइए बस उन सभी आउटपुट को पीएस के स्टडआउट पर रीडायरेक्ट करें और बाकी को ट्रांसक्रिप्ट करने दें।
वास्तव में, मुझे नहीं पता कि एमएस इंजीनियरों का कहना है कि उन्होंने अभी तक "उच्च लागत और तकनीकी जटिलताओं के कारण" इसे ठीक नहीं किया है, जब इसे इस तरह के सरल तरीके से काम किया जा सकता है।
किसी भी तरह से, start-process
के साथ प्रत्येक एकल कमांड चलाने के लिए एक बड़ा अव्यवस्था IMHO है, लेकिन इस विधि के साथ, आपको बस इतना करना होगा कि प्रत्येक पंक्ति में 2>&1 | Write-Output
कोड संलग्न है जो बाह्य आदेश चलाता है।
महान जवाब। लेकिन मुझे ऐसा लगता है कि पहले तरीके से एक त्रुटि है। अप्रत्यक्ष आतंकवाद के बजाय मुझे लगता है कि यह होना चाहिए- रीडायरेक्ट मानक Irror। – Grigory
अच्छा पकड़ो! फिक्स्ड :-) –
क्या यह पावरहेल रिमोटिंग के लिए काम करता है? मेरे पास परीक्षण है, मुझे लगता है कि पीएस रिमोटिंग के लिए दूसरा तरीका काम करता है। – Kiquenet