gpt4 book ai didi

c# - 为什么这个脚本在 C# 中不能正常工作,而它在 PowerShell ISE 中工作

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:17 26 4
gpt4 key购买 nike

我想运行 PowerShell 脚本以通过 C# 获取列表的 ContentType(s)。在 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 属性。所有返回的 psContentTypes 都是 string 类型,其值为:“Microsoft.SharePoint.SPContentType”

我的 C# 脚本有什么问题?

最佳答案

PSObject Class 封装一个基础对象,在这种情况下SPContentType ,您可以考虑使用以下选项来访问对象属性:

  1. 通过 PSObject.BaseObject Property 访问基础对象

    var contentType = psContentType.BaseObject as SPContentType;
    var contentTypeName = contentType.Name;
  2. 使用 PSObject.Members访问基本对象属性,例如检索内容类型名称的示例:

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

关于c# - 为什么这个脚本在 C# 中不能正常工作,而它在 PowerShell ISE 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com