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();
}
merak ediyorum Neden ilk etapta asp.net'den bir powershell betiği yürütmek istersiniz. –
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
@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ı? –