Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这个脚本没有';当它';她在PowerShell ISE工作_C#_Powershell_Sharepoint - Fatal编程技术网

C# 为什么这个脚本没有';当它';她在PowerShell ISE工作

C# 为什么这个脚本没有';当它';她在PowerShell ISE工作,c#,powershell,sharepoint,C#,Powershell,Sharepoint,我想运行一个PowerShell脚本,通过C#获取列表的ContentType。 在PowerShell中,以下脚本起作用: $list.ContentTypes[0].Name 在C#中运行时,我希望得到相同的结果,如下所示: powershell.AddScript(string.Format("$web = Get-SPWeb {0}", testWeb)); powershell.AddScript("$web.Lists"); var psObjects = powershell.I

我想运行一个
PowerShell
脚本,通过C#获取列表的
ContentType
。 在PowerShell中,以下脚本起作用:

$list.ContentTypes[0].Name
在C#中运行时,我希望得到相同的结果,如下所示:

powershell.AddScript(string.Format("$web = Get-SPWeb {0}", testWeb));
powershell.AddScript("$web.Lists");
var psObjects = powershell.Invoke();

foreach (var psObject in psObjects)
{
    var currentList = (dynamic)psObject;
    powershell.Runspace.SessionStateProxy.SetVariable("list", psObject);
    powershellContentTypes.AddScript("$list.ContentTypes");
    var psContentTypes = powershellContentTypes.Invoke();

    foreach (dynamic psContentType in psContentTypes)
    {
        // I expect to psContentType to have Name property.
        // But its properties are like string.
        var name = psContentType.Name
    }
}
但是,不幸的是,
psContentType
没有任何
Name
属性。所有返回的
psContentType
类型均为
string
,其值为:“Microsoft.SharePoint.SPContentType”

<> P>一个BASIC对象时,我的脚本中的脚本有什么不对?

>P>,在这种情况下,您可以考虑以下选项来访问对象属性:

  • 通过访问基本对象

  • 用于访问基本对象属性,例如 检索内容类型名称的示例:

    var contentTypeName = psContentType.Members["Name"].Value;
    
  • 修改示例
    您是否可以在不使用ISE的新powershell会话中测试此功能。部分环境可以在ISE中的脚本执行之间保持。从一个新的shell运行它可能会解释其中的差异。事实上,我不想引用SharePoint库。因此,强制转换为
    SPContentType
    。另外,第二个解决方案不起作用,并抛出
    NullReferenceException
    。我检查了
    成员
    ,它的值类似于
    拆分、子字符串、长度,
    ,类似于
    字符串
    的属性。
    var contentTypeName = psContentType.Members["Name"].Value;
    
    using (var powershell = PowerShell.Create())
    {
       powershell.AddScript("Add-PsSnapin Microsoft.SharePoint.PowerShell");
       powershell.AddScript(string.Format("$web = Get-SPWeb {0}", webUrl));
       powershell.AddScript("$web.Lists");
       var psLists = powershell.Invoke();
    
       foreach (var psList in psLists)
       {
           powershell.Runspace.SessionStateProxy.SetVariable("list", psList);
           powershell.AddScript("$list.ContentTypes");
           var psContentTypes = powershell.Invoke();
    
           foreach (var psContentType in psContentTypes)
           {
              //var contentType = psContentType.BaseObject as SPContentType;
              //var name = contentType.Name;
    
    
              var type = psContentType.BaseObject.GetType();
              if (type.Name == "SPContentType")
              {
                  var contentTypeName = psContentType.Members["Name"].Value;
              }
           }
       }
    }