2013-03-13 74 views
0

我以編程方式從我的SharePoint代碼運行PowerShell腳本文件(.ps1)。這裏是源代碼:以編程方式從SharePoint運行Powershell腳本文件

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

我在做什麼是

  1. 下載從SharePoint文檔庫
  2. 一「的.docx」文件調用運行在可執行文件進行轉換PowerShell腳本「.DOCX」 到 「.PDF」 文件
  3. 上載 「.PDF」 回SharePoint文檔庫

在S充足的代碼是第二部分。它在控制檯應用程序中完美工作,但不適用於SharePoint解決方案。錯誤是「對象未設置爲對象的實例」。但是沒有辦法知道它指向哪個對象。

結束使用SharePoint Word Automation Services。工作得很好。多謝你們。

+0

PowerShell腳本很長嗎?如果沒有,你應該嘗試把[try/catch](http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/11/hey-scripting-guy-march-11-2010.aspx)圍繞你認爲可能爲空的變量。讓他們重新拋出新消息中帶有變量名稱的新例外。 – skeletank 2013-03-13 13:14:26

+0

在哪一行發生異常? – Machinegon 2013-03-14 15:12:52

+0

集合 results = pipeline.Invoke();結果對象包含錯誤消息 – ronma 2013-03-15 00:37:35

回答

0

它聽起來好像沒有看到文件。你用什麼方法獲取文件?

它是一個網絡路徑和webdav協議\\[email protected]\davwwwroot\site\library\filename 將工作,但連接必須建立。

在我使用PowerShell的經驗中,我必須保持會話已經登錄並且可以正常工作。一旦該會話結束,它將斷開該連接。