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.docx
Cụ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();
}
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. –
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
@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? –