2013-04-13 66 views
0

我正在嘗試在我的web服務上運行powershell腳本,該驅動程序將驅動器映射到另一個系統上的共享文件夾並將文件夾複製到它。我現在有一個奇怪的問題,那就是這個腳本看起來好像執行得很好,但是腳本運行的工作似乎沒有完成。因此,我必須設定強制完成任務的超時時間,否則根本無法完成任務。然而,這並不是我想要的,因爲如果腳本花費的時間比預期的要長,它會產生一些令人討厭的副作用。另一方面,我希望在給定場景中儘可能快地執行,所以我想讓劇本「自然地」完成。在c#中通過Start-Job在計劃任務中映射驅動器與powershell

這是我的當前設置

C#的Web服務調用PowerShell腳本是這樣的:

public Collection<PSObject> executeCommand(String pCommand, String pName) 
     { 
      // Call the script 
      var runspaceConfiguration = RunspaceConfiguration.Create(); 
      var runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); 
      runspace.Open(); 
      var pipeline = runspace.CreatePipeline(); 

      pipeline.Commands.AddScript(pCommand); 
      pipeline.Commands.AddScript("Wait-Job -Name " + pName + " -Timeout 60"); 
      pipeline.Commands.AddScript("Receive-Job -Name " + pName); 

      return pipeline.Invoke(); 
     } 


String shareArguments = "some stuff here"; 
     String shareCommandName = "copyFolder"; 
     String shareCommand = "Start-Job -filepath " + currentDirectory + "\\scripts\\copyFolder.ps1 -ArgumentList " + shareArguments + " -Name " + shareCommandName + " -RunAs32"; 
     Collection<PSObject> results1 = executeCommand(shareCommand, shareCommandName); 

     StreamWriter sharestream = new StreamWriter("D:\\shareoutput.txt"); 
     foreach (PSObject obj in results1) 
     { 
      sharestream.WriteLine(obj.ToString()); 
     } 
     sharestream.Close(); 

腳本本身:

param($sharepath,$shareuser,$sharepassword,$hostname,$sourcefolder) 

    # create a credentials object 
    $secpasswd = ConvertTo-SecureString $sharepassword -AsPlainText -Force 
    Write-Output "0" 
    $cred = New-Object System.Management.Automation.PSCredential ($shareuser, $secpasswd) 
    Write-Output "1" 
    # Access the share 
    New-PSDrive -Name J -PSProvider FileSystem -Root $sharepath -Credential $cred 
    Write-Output "2" 
    # Copy the folder including the file 
    Copy-Item $sourcefolder "J:\" -Recurse -Force 
    Write-Output "3" 
    # Unmap drive 
    Remove-PSDrive -Name J 

當我取回的調試輸出工作,輸出看起來像這樣。如此看來,新-PSDrive來調用似乎這裏莫名其妙阻止:

0 
1 

任何想法究竟是什麼原因,我該如何解決?

在此先感謝您的任何提示

+0

如果y ou對照本地系統上的目錄進行測試,而不指定憑證? – mjolinor

+0

感謝您的提示,我只是檢查它,並沒有憑據的本地文件夾它工作正常,工作完成得相當快。這意味着什麼?我的意思是原始腳本已正確執行但未完成,因此憑據不會錯誤。 – vm370

+0

您有可能通過使用該後臺作業引入「第二跳」身份驗證方案,並且會干擾該驅動器映射? – mjolinor

回答

相關問題