2012-01-04 11 views
7

में मैं और गंतव्य एक पृष्ठभूमि जो मानकों के साथ एक .exe है में एक नौकरी को चलाने के लिए कोशिश कर रहा हूँ रिक्त स्थान है। उदाहरण के लिए:पृष्ठभूमि नौकरी Powershell

$exec = "C:\Program Files\foo.exe" 

और मैं मानकों के साथ इस चलाना चाहते हैं:

foo.exe /param1 /param2, etc. 

मैं जानता हूँ कि Start-Job करता है, लेकिन मैं विभिन्न संयोजनों की टन की कोशिश की है कि और यह या तो मुझे की वजह से एक त्रुटि देता है सफेद जगह या पैरामीटर के कारण। क्या कोई यहां सिंटैक्स के साथ मेरी मदद कर सकता है? मुझे लगता है कि करने के लिए $exec निष्पादन का मार्ग है, क्योंकि यह एक विन्यास फाइल का हिस्सा है और बाद में बदल सकता है की जरूरत है।

उत्तर

8

एक तरीका यह करने के लिए एक परम ब्लॉक के साथ एक script block का उपयोग करें।

अगर वहाँ इस तरह के एक फ़ाइल/फ़ोल्डर पथ के रूप में यह में एक स्थान के साथ एक भी तर्क है कि यह एक आइटम के रूप में यह इलाज के लिए उद्धृत किया जाना चाहिए। तर्क स्क्रिप्ट ब्लॉक को पारित एक सरणी है।

यह उदाहरण एक स्क्रिप्ट ब्लॉक का उपयोग करता है, लेकिन आप भी बजाय Start-Job cmdlet -ScriptBlock पैरामीटर का -FilePath पैरामीटर का उपयोग कर एक PowerShell स्क्रिप्ट का उपयोग कर सकते हैं।

यहाँ एक और उदाहरण रिक्त स्थान के साथ बहस है कि:

$scriptBlock = { 
    param (
     [string] $Source, 
     [string] $Destination 
    ) 
    $output = & xcopy $Source $Destination 2>&1 
    return $output 
} 

$job = Start-Job -scriptblock $scriptBlock -ArgumentList 'C:\My Folder', 'C:\My Folder 2' 
Wait-Job $job 
Receive-Job $job 

यहाँ का उपयोग कर एक उदाहरण है $args निर्मित बजाय चर param ब्लॉक।

$scriptBlock = { 
    $output = & xcopy $args 2>&1 
    return $output 
} 

$path1 = "C:\My Folder" 
$path2 = "C:\My Folder 2" 

"hello world" | Out-File -FilePath "$path1\file.txt" 

$job = Start-Job -scriptblock $scriptBlock -ArgumentList $path1, $path2 
Wait-Job $job 
Receive-Job $job 
+0

मदद के लिए धन्यवाद! 2> और 1 का क्या अर्थ है? – Brian

+0

@Brian आह हाँ कि धारा मानक बाहर करने के लिए मानक त्रुटि धारा (2) रीडायरेक्ट करेगा (1)। यह सुनिश्चित करता है कि आप 'प्राप्तकर्ता-नौकरी' cmdlet से निष्पादन योग्य से सभी टेक्स्ट प्राप्त करेंगे।आम तौर पर मैं पृष्ठभूमि नौकरी में क्या करता हूं निष्पादन योग्य '$ out = xcopy $ a $ b 2> और 1' के आउटपुट को कैप्चर करता है, फिर जांच करें कि निकास कोड (' $ LASTEXITCODE') गैर-शून्य है और यदि ऐसा है तो कब्जा फेंक दें एक अपवाद संदेश के रूप में पाठ: '$ बाहर फेंक'। –

3

एंडी चाल आम तौर पर बहुत अच्छी तरह से काम करता है।

$jobArgs = @{Source="foo"; Destination="bar"} 
$jobArgs |Export-CliXml -Path $env:\Temp\MyArgs.clixml 

और नौकरी में ...

Start-Job { 
.... $jobArgs = Import-CliXml -Path $env:\Temp\MyArgs.clixml 
} | Wait-Job | Receive-Job 

मैं दोनों दृष्टिकोण नियमित उपयोग करें: आप पैरामीटर सेट हो या वह अन्य काम में जटिल जानकारी ले जाना चाहते हैं, तो आप भी इस तकनीक की कोशिश कर सकते ।

मैं -ArgumentList/ScriptBlock पैरामीटर का उपयोग होता है:

  • मैं पैरामीटर के साथ काम नहीं कर रहा हूँ सेट
  • मैं एक इन-मेमोरी नौकरी (ShowUI या WPK में -AsJob क्षमता) की तरह उपयोग कर रहा हूँ, जहां तर्क असली वस्तुओं (वेब ​​सर्वर, आईएसओ शिकायत प्रयोगशालाओं, आदि)
हैं, और वे
  • मैं एक उपयोगकर्ता संदर्भ में, जहां मैं एक नौकरी चला सकते में चल रहा हूँ मर नहीं सकते हैं, लेकिन डिस्क पर संग्रहीत नहीं कर सकता

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

    आशा है कि यह