2012-04-22 24 views
5

के नाम के रूप में पहचाना नहीं गया है मेरे पास एक फ़ाइल में संग्रहीत PowerShell स्क्रिप्ट है, MergeDocuments.ps1। जब मैं विंडोज PowerShell आदेश शीघ्र से स्क्रिप्ट चलाने यह ठीक
.\MergeDocuments.ps1 1.docx 2.docx merge.docxशब्द 'cmdlet,

एक Windows सांत्वना आवेदन से स्क्रिप्ट कॉलिंग चलाता भी ठीक चलाता है।

जब मैंने स्क्रिप्ट को एक Asp.Net वेब सेवा से कॉल करने का प्रयास किया, तो मुझे रजिस्ट्री पहुंच से संबंधित कुछ मुद्दों का सामना करना पड़ा। मैंने प्रतिरूपण का उपयोग किया और इस समस्या को हल करने के लिए रजिस्ट्री कुंजी HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell पर नेटवर्क सेवा खाते को अनुमति दी

अगला मुझे PowerShell OpenXmlPowerTools.DocumentSource [] के प्रकार बनाने में असमर्थ होने के बारे में समस्या का सामना करना पड़ा, इसलिए मैंने अपनी लिपि में निम्नलिखित जोड़ा

Add-Type -Path "C:\Users\Administrator\Documents\WindowsPowerShell\Modules\OpenXmlPowerTools\OpenXmlPowerTools.dll" 
Import-Module OpenXmlPowerTools 

अब वर्तमान समस्या यह है कि मैं त्रुटि हो रही है कि "शब्द 'मर्ज-OpenXmlDocument' एक cmdlet का नाम के रूप में मान्यता प्राप्त नहीं है, ..."

मैं ऐसा कैसे हल कर सकते हैं ?

PowerShell स्क्रिप्ट

Add-Type -Path "C:\Users\Administrator\Documents\WindowsPowerShell\Modules\OpenXmlPowerTools\OpenXmlPowerTools.dll" 

Import-Module OpenXmlPowerTools 

# The last argument is the path of the merged document 
$noOfSourceDocs = ($($args.length) - 1) 

# Create an array to hold all the source documents 
[OpenXmlPowerTools.DocumentSource[]] $docs = New-Object OpenXmlPowerTools.DocumentSource[] $noOfSourceDocs 

for ($i = 0; $i -lt $noOfSourceDocs; $i++) 
{ 
    $docs[$i] = New-Object -TypeName OpenXmlPowerTools.DocumentSource -ArgumentList $args[$i] 
    $docs[$i].KeepSection = 1 
} 

Merge-OpenXmlDocument -OutputPath $args[-1] -Sources $docs 

वेब सेवा नेट कोड

using (new Impersonator(username, domain, password)) 
{ 
    // create Powershell runspace 
    Runspace runspace = RunspaceFactory.CreateRunspace(); 
    runspace.Open(); 

    RunspaceInvoke invoker = new RunspaceInvoke(runspace); 
    invoker.Invoke("Set-ExecutionPolicy Unrestricted"); 

    // create a pipeline and feed it the script file 
    Pipeline pipeline = runspace.CreatePipeline(); 
    Command command = new Command(ConfigurationManager.AppSettings["PowerShellScript"]); 
    foreach (var file in filesToMerge) 
    { 
     command.Parameters.Add(null, file); 
    } 
    command.Parameters.Add(null, outputFilename); 
    pipeline.Commands.Add(command); 

    pipeline.Invoke(); 
    runspace.Close(); 
} 
+1

मैं उत्सुक हूँ आप पहले स्थान पर एएसपीनेट से पावरहेल स्क्रिप्ट निष्पादित करना क्यों चाहेंगे। –

+0

मुझे यकीन नहीं है लेकिन 'OpenXmlPowerTools.dll'' v2.0.50727' को लक्षित कर सकता है - जांचें कि आप अपना सी # डीएलएल कैसे बनाते हैं? यदि यह .NET 4.0 है तो मैंने इसी तरह के मुद्दों को देखा है - आपको इसके बजाय 3.5 को लक्षित करने की आवश्यकता होगी। कोशिश करो और मुझे बताओ। – NSGaga

+0

@ सेठ मुझे एकाधिक वर्ड दस्तावेज़ों को मर्ज करने की ज़रूरत है, OpenXmlPowerTools मुझे सबसे अच्छा टूल मिल सकता है। यही कारण है कि मुझे वेब सेवा से PowerShell स्क्रिप्ट चलाने की आवश्यकता है। क्या उनके कोई अन्य सुझाव हैं? –

उत्तर

1

तुम सिर्फ PowerShell सिस्टम मॉड्यूल रास्ते में OpenXmlPowerTools मॉड्यूल स्थापित करने का प्रयास कर सकते हैं:

C:\Windows\system32\WindowsPowerShell\v1.0\Modules 
+0

मैंने आपके द्वारा निर्दिष्ट फ़ोल्डर में, DLL के साथ OpenXmlPowerTool फ़ोल्डर को रखा है। कोड काम कर रहा है और यह अब मर्ज-ओपनएक्सएमएल डॉकमेंट के बारे में शिकायत नहीं कर रहा है। हालांकि विलय दस्तावेज उत्पन्न नहीं हुआ है! –

+0

यह मर्ज-ओपनएक्सएमएल दस्तावेज cmdlet के साथ एक समस्या की तरह लगता है। आपका उत्तर उत्तर के रूप में चिह्नित होने का हकदार है। –

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