2012-04-22 9 views
5

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(); 
} 
+1

私は好奇心が強いです最初にasp.netからpowershellスクリプトを実行したいのはなぜでしょうか。 –

+0

'OpenXmlPowerTools.dll'は' v2.0.50727'をターゲットにしているかもしれません - C#DLLのビルド方法を確認してください。 .NET 4.0の場合は、同様の問題が発生しています。代わりに3.5をターゲットにする必要があります。試してみてください。 – NSGaga

+0

@seth複数のWord文書をマージする必要がありますが、OpenXmlPowerToolsは私が見つけられる最良のツールです。そのため、WebサービスからPowerShellスクリプトを実行する必要があります。彼らの他の提案はありますか? –

答えて

1

あなただけのPowerShellのシステムモジュールパスにOpenXmlPowerToolsモジュールをインストールしようとすることができます:

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

OpenXmlPowerToolフォルダを、指定したフォルダ内のDLLとともに配置しました。コードが動作しており、Merge-OpenXmlDoucmentについてもう不満はしていません。ただし、マージされた文書は生成されません! –

+0

これは、Merge-OpenXmlDocumentコマンドレット自体の問題のようです。あなたの答えは答えと記されている必要があります。 –

関連する問題