PowerShellスクリプトがファイルMergeDocuments.ps1に保存されています。私は、Windows PowerShellコマンドプロンプトからスクリプトを実行すると、それはまた、正常に動作Windowsコンソールアプリケーションからスクリプトを呼び出す
.\MergeDocuments.ps1 1.docx 2.docx merge.docx
「 '」という名前がコマンドレットの名前として認識されない
細かい動作します。
私はAsp.Net Webサービスからスクリプトを呼び出そうとしたとき、レジストリアクセスに関するいくつかの問題に直面しました。私は次の偽装を使用して
この問題を解決するためにHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
キーレジストリにNetwork Serviceアカウントに許可を与えた私は、PowerShellは型OpenXmlPowerTools.DocumentSourceのオブジェクト[]を作成することができないという問題に直面していましたので、私は私のスクリプトに以下を追加しました私がいることを解決するにはどうすればよい
Add-Type -Path "C:\Users\Administrator\Documents\WindowsPowerShell\Modules\OpenXmlPowerTools\OpenXmlPowerTools.dll"
Import-Module OpenXmlPowerTools
今現在の問題は、私はエラーを取得していますということである「という用語は、 『マージ・OpenXmlDocument』のコマンドレットの名前として認識されていない、...」
?
の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
Webサービスの.Netコード
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();
}
私は好奇心が強いです最初にasp.netからpowershellスクリプトを実行したいのはなぜでしょうか。 –
'OpenXmlPowerTools.dll'は' v2.0.50727'をターゲットにしているかもしれません - C#DLLのビルド方法を確認してください。 .NET 4.0の場合は、同様の問題が発生しています。代わりに3.5をターゲットにする必要があります。試してみてください。 – NSGaga
@seth複数のWord文書をマージする必要がありますが、OpenXmlPowerToolsは私が見つけられる最良のツールです。そのため、WebサービスからPowerShellスクリプトを実行する必要があります。彼らの他の提案はありますか? –