如何在Sharepoint 2010列表字段中修改内部名称

时间:2014-05-19 12:57:05

标签: powershell sharepoint-2010 sharepoint-list

我需要更改sharepoint 2010列表项字段的内部名称。出于某种原因,我们的迁移软件在2007-> 2010迁移期间将其重命名,此字段由其他进程引用,因此我们需要将内部名称恢复为原始名称。此字段存在于迁移站点中的200多个列表中,因此我们需要一种方法以编程方式执行此操作 - 首选PowerShell。

1 个答案:

答案 0 :(得分:0)

$newInternalName = "yourInternalFieldName"
$displayName = "oldDisplayName"
$SPWebApp = Get-SPWebApplication "http://yourwebapp"

foreach (SPList $currList in $SPWebApp.Lists)
{
    foreach (SPField $fld in $currList.Fields) #you could potentially use a different command here to get the field more efficiently
    {
        if ($fld.Name == $displayName)
        {               
            #The boolean in the parameter list is for required/non-required field $currList.Fields.Add($newInternalName,Microsoft.SharePoint.SPFieldType.Text,$False)
            foreach (SPListItem $item in $currList.Items)
            {
                $item[$newInternalName] = $item[$displayName] 
                $item[$newInternalName].Title = $displayName #I'm assuming you want to keep the display name the same
                    $item.Update()
            }
            Break #since you've already fixed the column for this list no need to keep going through the fields
            # optional delete unwanted column
            # $currList.Fields.Delete($displayName)
            # $currList.Update()
        }
    }
}

据我所知,一旦创建了字段,就无法更改字段的内部名称。在这里,我创建一个具有正确内部名称的新字段并复制值。我今天无法访问带有Powershell的服务器,因此我无法对此进行测试,但这应该非常接近您的需求。根据您正在处理的字段类型,如果您想使用其他添加功能,和/或您想要删除旧字段,您可能需要稍微调整一下。

此处定义了在Add函数中选择字段类型的枚举: http://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.spfieldtype(v=office.14).aspx

Add函数有几个重载,所以如果我使用的那个不适合你,你可能想要使用其中一个 http://msdn.microsoft.com/en-us/library/office/aa540133(v=office.14).aspx