每个SharePoint开发人员的生活迟早都会对内容类型感到愚蠢,并重命名Item基类型中的Title字段。这有两个影响:
现在,我已经将项目内容类型设置为OK,但是我仍然遇到数百个(如果不是数千个)列表,这些列表现在有一个名为“Publication Title”的字段,我想将其更改为'标题'。
经过一些谷歌搜索后,我很快就熟悉了PowerShell,并准备了一个脚本来遍历网站集并重命名所有标题字段。
但我确信我不是第一个这样做的人,我确信我不是第一个想到这个解决方案的人。任何人都有一些代码可以解决这个问题吗?
哦,是的,这是在生产农场。哈哈。
答案 0 :(得分:2)
所以我猜这不是......
我写了一个执行重命名的powershell脚本:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
function global:Get-SPSite($url){
return new-Object Microsoft.SharePoint.SPSite($url)
}
#Change these variables to your site URL and list name
$siteColletion = Get-SPSite("http://go.snap-undp.org/focusareas/")
$webs = $siteColletion.allwebs
#Walk through each site in the site collection
#use FOR loops because collections break when you update them
for($webIndex=0;$webIndex -ne $webs.count;$webIndex++){
#use this for output
$webTitle = $webs[$webIndex].title.toString()
"PROCESSING $webTitle"
#loop though each list in the current website
for($i=0;$i -ne $webs[$webIndex].lists.count;$i++){
#this is used for output and to make the code a little more readable
$listTitle = $webs[$webIndex].lists[$i].toString()
#loop through each field in the lsit, looking for the offending name
foreach($field in $webs[$webIndex].lists[$i].fields){
if($field.title -eq "Publication Title"){
if($listTitle -eq "Participants" -or $listTitle -eq "User Account Request List"){
$field.title = "Last Name"
"workshop update to $listTitle"
}else{
$field.title = "Title"
"normal update to $listTitle"
}
#$field.Update()
break
}
}
}
}
#Dispose of the site object
$siteColletion.Dispose()
这非常具体。它查找名为“Publication Title”(错误名称)的列并将它们重命名为Title,除非该列表名为“Participants”,在这种情况下,它重命名为“Last Name”。修改品尝。