术语“”未被识别为 cmdlet 的名称

本文关键字:cmdlet 识别 术语 | 更新日期: 2023-09-27 18:32:05

我有一个存储在文件MergeDocuments.ps1中的PowerShell脚本。当我从Windows PowerShell命令提示符运行脚本时,它运行良好
.'MergeDocuments.ps1 1.docx 2.docx merge.docx

从 Windows 控制台应用程序调用脚本也可以正常运行。

当我尝试从 Asp.Net Web 服务调用脚本时,我遇到了一些有关注册表访问的问题。我使用了模拟并授予网络服务帐户注册表项的权限HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'PowerShell'1'ShellIds'Microsoft.PowerShell

解决此问题

接下来,我遇到了有关PowerShell无法创建OpenXmlPowerTools.DocumentSource[]类型的对象的问题,因此我在脚本中添加了以下内容。

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

现在的问题是我收到错误"术语'合并-OpenXmlDocument'未被识别为 cmdlet 的名称,..."

我该如何解决这个问题?

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

网络服务 .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();
}

术语“”未被识别为 cmdlet 的名称

您可以尝试在PowerShell系统模块路径中安装OpenXmlPowerTools模块:

C:'Windows'system32'WindowsPowerShell'v1.0'Modules