2012-06-27 68 views
1

你好我試圖從powershell訪問一個共享點列表。 powershell腳本從c#應用程序執行。從c#應用程序從Powershell腳本訪問sharepoint

如果我運行從C#應用程序,我得到以下異常:

異常調用 「.ctor」 與 「1」 的說法(S):「Web應用程序 在http://pc/websites/Test4/找不到。確認您有 輸入的URL正確。如果該URL應該提供現有的 內容,系統管理員可能需要添加一個新的請求URL 映射到預期的應用程序。

我的代碼:

C#

 string cmdArg = "C:\\Scripts\\GroupChangeGroup.ps1 1"; 
        Runspace runspace = RunspaceFactory.CreateRunspace(); 
        runspace.ApartmentState = System.Threading.ApartmentState.STA; 
        runspace.ThreadOptions = PSThreadOptions.UseCurrentThread; 
         runspace.Open(); 
        Pipeline pipeline = runspace.CreatePipeline(); 

Command newcom = new Command("Add-PSSnapin"); 
         newcom.Parameters.Add("Name", "microsoft.exchange.management.powershell.e2010"); 
         pipeline.Commands.Add(newcom); 

        Command newcom2 = new Command("Add-PSSnapin"); 
        newcom2.Parameters.Add("Name", "Microsoft.SharePOint.POwershell"); 
        pipeline.Commands.Add(newcom2); 

        pipeline.Commands.AddScript(cmdArg); 
        pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); 
        Collection<PSObject> results = pipeline.Invoke(); 
        var error = pipeline.Error.ReadToEnd(); 
        runspace.Close(); 

Powershell的

$site = New-Object Microsoft.SharePoint.SPSite("http://pc/websites/Test4/") 
$web = $site.OpenWeb() 
$list = $web.Lists["GroupsList - ListInstance1"] 
$listitem = $list.Items.GetItemByID(3) 

如果我從PS執行應用程序沒有proble米(同一用戶上下文)

用戶WSS_ADMIN_WPG

回答

1

的SharePoint的成員不與.net 4.0。 PowerShell使用.Net 3.5運行,這就是爲什麼它可以與PS協同工作。

您應該切換回.Net 3.5 SP1。

另外,一定要將您的項目設置爲不使用X86編譯設置運行。

將其設置爲AnyCPU或x64。

+0

我將Framework更改爲3.5,並將Target CPU設置爲x64,但未成功。我不認爲這是造成麻煩的框架,因爲共享點操作在powershell中? ... – HW90

+0

嘗試添加腳本'$ farm = Get-Farm'並檢查它是否正確加載。 –

+0

我是你的意思是$ farm = Get-SPFarm?如果我只是在ps腳本中執行它,它就可以工作。如果我從c#啓動腳本,我會遇到以下故障:術語'Get-SPFarm'不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確,然後重試。 – HW90

相關問題