首页 文章

从SharePoint以编程方式运行Powershell脚本文件

提问于
浏览
0

我正在以编程方式从我的SharePoint代码运行powershell脚本文件(.ps1) . 这是源代码:

using (new Impersonator("username", "domain", "password"))
{
  using (RunspaceInvoke invoker = new RunspaceInvoke())
  {
    invoker.Invoke("Set-ExecutionPolicy Unrestricted");
  }

  string cmdArg = String.Format(@"C:\Office2Pdf\officetopdf.ps1 {0} {1}", 
    DOWNLOAD_FILE_PATH, UPLOAD_FILE_PATH);

  Runspace runspace = RunspaceFactory.CreateRunspace();
  runspace.ApartmentState = System.Threading.ApartmentState.STA;
  runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
  runspace.Open();

  Pipeline pipeline = runspace.CreatePipeline();
  pipeline.Commands.AddScript(cmdArg);

  pipeline.Commands[0].MergeMyResults(
    PipelineResultTypes.Error, PipelineResultTypes.Output);

  Collection<PSObject> results = pipeline.Invoke();
  var error = pipeline.Error.ReadToEnd();
  runspace.Close();

  if (error.Count >= 1)
  {
    string errors = "";

    foreach (var Error in error)
      errors = errors + " " + Error.ToString();
  }
}

我在做什么

  • 从SharePoint文档库下载".docx"文件

  • 调用运行可执行文件的powershell脚本将".docx"转换为".pdf"文件

  • 将".pdf"上载回SharePoint文档库

示例代码用于第二部分 . 它在控制台应用程序中完美运行,但在SharePoint解决方案中不起作用 . 错误是“对象未设置为对象的实例” . 但是没有办法分辨它指的是哪个对象 .

Ended up using SharePoint Word Automation Services. Works pretty well. Thanks guys.

1 回答

  • 0

    听起来好像没有看到文件 . 你用什么方法来获取文件?

    它是一个网络路径,webdav协议 \\yoursite@ssl\davwwwroot\site\library\filename 将工作,但必须 Build 连接 .

    根据我使用PowerShell的经验,我必须保持会话登录,这是有效的 . 一旦该会话结束,它就会丢弃该连接 .

相关问题