Sitecore PowerShell脚本改模板自动生成英文版本的原因及解决方法
问题原因及解决方案
原因
当你通过PowerShell修改Sitecore项的模板ID时,Sitecore的默认行为是为所有站点启用的语言自动生成对应版本——即使原项没有该语言的版本。这是因为模板修改属于触发跨语言版本同步的操作,系统会默认尝试为所有活跃语言创建新版本以保持数据一致性。
解决方案
1. 仅在目标语言(中文)上下文下编辑项
执行编辑操作前,明确切换到中文语言版本的上下文,确保修改只作用于中文版本,避免触发其他语言的版本生成:
# 获取目标项 $item = Get-Item -Path "master:/sitecore/content/你的项路径" # 指定目标语言为中文 $targetLang = [Sitecore.Globalization.Language]::Parse("zh-CN") # 切换到中文版本 $targetItem = $item.Versions.GetVersion($targetLang) if ($targetItem) { $targetItem.Editing.BeginEdit() $targetItem.TemplateId = $newTemplateId $targetItem.Editing.EndEdit() }
2. 使用带语言参数的编辑重载方法
调用BeginEdit的重载版本,明确指定操作语言,并关闭自动创建新语言版本的逻辑:
$item = Get-Item -Path "master:/sitecore/content/你的项路径" $targetLang = [Sitecore.Globalization.Language]::Parse("zh-CN") $item.Editing.BeginEdit($targetLang, $false) # 第二个参数:不创建新语言版本 $item.TemplateId = $newTemplateId $item.Editing.EndEdit($false, $true) # 第三个参数:保存编辑
3. 禁用站点不需要的语言
如果站点完全不需要英文版本,直接在Sitecore后台禁用英文语言:
- 进入
/sitecore/system/Languages/English节点 - 将
Enabled字段设置为No - 保存后,系统将不再自动生成英文版本
内容的提问来源于stack exchange,提问作者Kalaiarasi K
相关产品推荐
相关产品推荐

