2010-12-17 14 views
5

मैं एक स्क्रिप्ट है कि मानकों के एक नंबर की आवश्यकता है:Powershell: एक नौकरी के लिए पैरामीटर प्रदान करने के

param ([string]$FOO="foo",[string]$CFG='\ps\bcpCopyCfg.ps1', [string]$CFROM="none", ` 
[string]$CTO="none", [switch]$HELP=$FALSE, [switch]$FULL=$FALSE, [string]$CCOL="none" ` 
,[string]$CDSQUERY="none", [string]$CMSSRV="none" ` 
,[string]$CSYBDB="none", [string]$CMSDB="none") 

जब कमांड प्रॉम्प्ट से कहा जाता है जैसे

powershell। \ BcpCopy.ps1 -CFROM earn_n_deduct_actg -CTO fin_earn_n_deduct_actg -CCOL f_edeh_doc_id

सब कुछ ठीक काम करता है। मैं तथापि जरूरत है कई (दर्जनों) शुरू करने के लिए समानांतर में स्क्रिप्ट के उदाहरण और मैं एक आवरण स्क्रिप्ट है कि एक एक नौकरी के रूप में वास्तविक काम कर रही कॉल लिखा है: मैं तर्क (जैसे कीवर्ड शामिल करने के साथ एक सरणी तैयार " -CFG ") ANHD इसे पारित शुरू काम करने के लिए:

# Prepare script block to be released 
    $ARGS=("-CFG ", $CFG, "-CSYBDB ", $SYBDB, "-CMSDB ",$MSDB, "-CFROM ", $SYBTBL, "-CTO ",$MSTBL) 
    if ($FULL) { 
     $ARGS = $ARGS + " -FULL" 
    } else { 
     $ARGS = $ARGS + " -CCOL $($args[5]) " 
    } 
    "Argument array:" 
    $ARGS 

    start-job -scriptblock {powershell.exe -file '\ps\bcpCopy.ps1'} -ArgumentList $ARGS 

दुर्भाग्य से, कहा जाता है स्क्रिप्ट तर्क प्राप्त नहीं होता है: फोन करने वाले सरणी प्रिंट और यह ठीक लग रहा है:

तर्क सरणी:
- सीएफजी
\ ps \ bcpCopyCfgOAH.ps1
-CSYBDB
vnimisro
-CMSDB
IMIS_UNOV
-CFROM
earn_n_deduct_ref
-CTO
fin_earn_n_deduct_ref
, फुल

लेकिन कहा जाता है स्क्रिप्ट से उत्पादन का कहना है कि केवल प्राप्त पैरामीटर है कॉन्फ़िगरेशन फ़ाइल - बाकी सभी अपने डिफ़ॉल्ट मानों पर हैं।

पुनश्च C: \ ps> प्राप्त नौकरी 1391
12/17/2010 10:54:14 तालिका कोई भी अपलोड प्रारंभ हो; स्रोत डीबी कोई नहीं;
12/17/2010 10:54:14 लक्ष्य तालिका कोई नहीं है; लक्ष्य डीबी कोई नहीं है;
12/17/2010 10:54:14 कॉन्फ़िगर फ़ाइल \ ps \ bcpCopyCfg.ps1 है।
12/17/2010 10:54:14 लक्ष्य सर्वर (एमएस एसक्यूएल) secap900 नए
12/17/2010 10:54:14 स्रोत डेटाबेस निर्दिष्ट किया जाना चाहिए है। बाहर निकलना ...

क्या आप कृपया मुझे बता सकते हैं कि मैं क्या गलत कर रहा हूं?

उत्तर

6

मुझे यकीन है कि आप क्या करने की कोशिश कर रहे हैं कि वास्तव में क्या नहीं कर रहा हूँ, लेकिन यह गलत लग रहा है:

start-job -scriptblock { 
    powershell.exe -file '\ps\bcpCopy.ps1'} -ArgumentList $ARGS 

आप पूरी तरह से नया powershell प्रक्रिया पैदा कर रहे बेकार। इसके बजाय इसे आजमाएं:

start-job -scriptblock { 
    & 'c:\ps\bcpCopy.ps1' @args } -ArgumentList $ARGS 

"@args" वाक्यविन्यास को "स्पैटिंग" कहा जाता है। यह पारित तर्कों का विस्तार करेगा और सुनिश्चित करेगा कि प्रत्येक तत्व को पैरामीटर के रूप में माना जाता है। एम्परसैंड (&) "कॉल" ऑपरेटर है।

+0

सलाह के लिए धन्यवाद। – Lubo

+0

सलाह के लिए धन्यवाद। अब नौकरियां जारी की गई हैं और कुछ भी नहीं करने में लटकने लगती हैं। लटकना जारी रखें यहां तक ​​कि मैंने स्क्रिप्ट में बाहर निकलने के ठीक बाद बाहर निकल दिया है और तर्कों को प्रिंट करता है। बीटीडब्ल्यू नौकरियों को शुरू करने के इस तरीके से कार्य mngr अभी भी 15 शक्तियों को संसाधित करता है - बिल्कुल # मैंने – Lubo

+0

शुरू किया और मैन्युअल रूप से नौकरियों को रोकने के बाद भी, नौकरी नौकरी वापस नहीं करती – Lubo

0

एक और तरीका है कि सरणी से पहले @ डालना है। मैंने $ एआरजीएस वैरिएबल को $ झंडे से स्क्रिप्टब्लॉक में $ args को अलग करने के लिए $ झंडे में बदल दिया।

$flags = @("-CFG ", $CFG, "-CSYBDB ", $SYBDB, "-CMSDB ",$MSDB, "-CFROM ", $SYBTBL, "-CTO ",$MSTBL) 

If($FULL) { 
    $flags = $flags + " -FULL" 
} 
Else { 
    $flags = $flags + " -CCOL $($args[5]) " 
} 
"Argument array:" 
$flags 

start-job -scriptblock {powershell.exe -file '\ps\bcpCopy.ps1' $args} -ArgumentList $flags 

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

  • कोई संबंधित समस्या नहीं^_^