2012-04-22 17 views
5

Bir dosyada, MergeDocuments.ps1 dosyasında saklanan bir PowerShell betiğim var. Windows PowerShell komut isteminden komut çalıştırdığınızda aynı zamanda iyi çalışır Windows konsol uygulamasından senaryoyu çağırma
.\MergeDocuments.ps1 1.docx 2.docx merge.docx'' terimi bir cmdlet'in adı olarak tanınmıyor,

iyi çalışır.

Bir Asp.Net web hizmetinden komut dosyasını aramayı denediğimde, kayıt defteri erişimi ile ilgili bazı sorunlarla karşılaştım. Ben PowerShell türündeki nesneleri oluşturmak mümkün olmakla ilgili sorunu karşılaştığı bu sorunu

Sonraki çözmek için bürünme kullanılır ve anahtar kayıt HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell Network Service hesabına izin verdi OpenXmlPowerTools.DocumentSource [], bu yüzden benim komut dosyasına aşağıdaki eklendi

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

Şimdi şimdiki sorun hatasını alıyorum olmasıdır "terimi 'Birleştirme-OpenXmlDocument' bir cmdlet'inin adı olarak tanınmadı ..."

Bunu çözebilir nasıl ?

PowerShell Komut

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 

Belediyesi Web Net Kod

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

merak ediyorum Neden ilk etapta asp.net'den bir powershell betiği yürütmek istersiniz. –

+0

Emin değilim 'OpenXmlPowerTools.dll' v2.0.50727'yi hedefliyor olabilir - C# DLL'nizi nasıl oluşturduğunuzu kontrol edin? .NET 4.0 ise benzer sorunları gördüm - bunun yerine 3.5 hedeflemeniz gerekir. Beni anlamaya çalış. – NSGaga

+0

@seth Birden fazla Word belgesini birleştirmem gerekiyor, OpenXmlPowerTools bulabildiğim en iyi araçtır. İşte bu yüzden bir web servisinden PowerShell betiğini çalıştırmam gerekiyor. Başka önerileri var mı? –

cevap

1

sadece PowerShell Sistem modülü yolunda OpenXmlPowerTools modülünü yüklemeye çalıştığınızda Can:

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

OpenXmlPowerTool klasörünü, içindeki DLL ile belirttiğiniz klasöre yerleştirdim. Kod çalışıyor ve artık birleştirme-OpenXmlDoucment hakkında şikayet etmiyor. Ancak birleştirilmiş belge oluşturulmadı! –

+0

Bu, Merge-OpenXmlDocument cmdlet'inin kendisinde bir sorun gibi görünüyor. Cevabınız cevap olarak işaretlenmeyi hak ediyor. –

İlgili konular