从c#应用程序访问Powershell脚本中的sharepoint

时间:2012-06-27 08:00:12

标签: c# sharepoint c#-4.0 powershell sharepoint-2010

您好我正在尝试从powershell访问sharepoint列表。 powershell脚本是从c#应用程序执行的。

如果我运行c#应用程序,我会得到以下异常:

  

使用“1”参数调用“.ctor”的异常:“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执行应用程序没有问题。 (相同的用户上下文)

用户是WSS_ADMIN_WPG

的成员

1 个答案:

答案 0 :(得分:1)

SharePoint不适用于.Net 4.0。 PowerShell运行.Net 3.5,这就是它与PS一起使用的原因。

您应该切换回.Net 3.5 SP1。

此外,请确保将项目设置为不使用X86编译设置运行。

将其设置为AnyCPU或x64。