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