2012-04-22 30 views
5

Tôi có tập lệnh PowerShell được lưu trữ trong tệp, MergeDocuments.ps1. Khi tôi chạy tập lệnh từ lời nhắc lệnh Windows PowerShell, nó chạy tốt
.\MergeDocuments.ps1 1.docx 2.docx merge.docxCụm từ '' không được công nhận là tên của lệnh ghép ngắn,

Gọi tập lệnh từ ứng dụng bảng điều khiển Windows cũng chạy tốt.

Khi tôi thử gọi tập lệnh từ dịch vụ web Asp.Net, tôi đã gặp một số vấn đề liên quan đến truy cập đăng ký. Tôi đã sử dụng mạo danh và đã cấp quyền cho tài khoản Dịch vụ mạng cho khóa đăng ký HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell để giải quyết sự cố này

Tiếp theo tôi gặp sự cố về PowerShell không thể tạo đối tượng thuộc loại OpenXmlPowerTools.DocumentSource [], vì vậy tôi đã thêm phần sau vào tập lệnh của mình

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

Bây giờ vấn đề hiện tại là tôi đang nhận được lỗi "Thuật ngữ 'Merge-OpenXmlDocument' không được công nhận là tên của một lệnh, ..."

làm thế nào tôi có thể giải quyết mà ?

PowerShell Script

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 

Webservice Net Mã

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

tôi tò mò tại sao bạn muốn thực thi một kịch bản PowerShell từ asp.net ngay từ đầu. –

+0

Tôi không chắc chắn nhưng 'OpenXmlPowerTools.dll' có thể nhắm mục tiêu' v2.0.50727' - kiểm tra cách bạn xây dựng C# DLL của bạn? Nếu đó là .NET 4.0 tôi đã nhìn thấy các vấn đề tương tự - bạn cần phải nhắm mục tiêu 3,5 thay vào đó. Hãy thử và cho tôi biết. – NSGaga

+0

@seth Tôi cần hợp nhất nhiều tài liệu Word, OpenXmlPowerTools là công cụ tốt nhất mà tôi có thể tìm thấy. Đó là lý do tại sao tôi cần chạy tập lệnh PowerShell từ một dịch vụ web. Có bất kỳ đề xuất nào khác của họ không? –

Trả lời

1

Bạn có thể chỉ cần cố gắng để cài đặt OpenXmlPowerTools module trong module đường Hệ thống PowerShell:

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

Tôi đã đặt thư mục OpenXmlPowerTool, với DLL bên trong nó, trong thư mục bạn đã chỉ định. Mã đang hoạt động và nó không phàn nàn về Merge-OpenXmlDoucment nữa. Tuy nhiên tài liệu đã được hợp nhất không được tạo! –

+0

Điều này có vẻ giống như một vấn đề với lệnh ghép ngắn Merge-OpenXmlDocument. Câu trả lời của bạn xứng đáng được đánh dấu là câu trả lời. –

Các vấn đề liên quan