powershell脚本删除sitecore

时间:2015-04-28 19:46:56

标签: powershell sitecore

我想使用此脚本删除法语版本的所有内容项目,并将英文版本保留在sitecore中,但想要在确定它之前看起来不错:(

cd 'master:/sitecore/content'

function FilterItemsToProcess($item) 
{
    Get-Item $item.ProviderPath -Language "fr-CA"
}

$list = [System.Collections.ArrayList]@()
$itemsToProcess = Get-ChildItem -Recurse . | foreach {FilterItemsToProcess($_)}
if($itemsToProcess -ne $null)
{

    $itemsToProcess | ForEach-Object { 
        | remove-item
    }
}

2 个答案:

答案 0 :(得分:10)

Miroo,

您需要知道的一件事是Remove-Item总是将项目删除。即使您管道特定于语言的版本,它也不会仅删除该语言。这是因为sitecore API始终返回特定语言的项目,Remove-Item无法忽略意图。

您需要使用的是Remove-ItemLanguage命令行开关。

e.g。在下面的示例中,我创建了一个"测试"我的内容中的项目,然后为每个项目添加波兰语版本,并在下一步中删除波兰语版本。

New-Item master:\content\ -ItemType "Sample/sample item" -Name test -Language en | Out-Null

foreach ($i in 1..10) {
    New-Item master:\content\test\ -ItemType "Sample/sample item" -Name $i -Language en | Out-Null
}

Get-ChildItem master:\content\test\ | Add-ItemLanguage -TargetLanguage pl-pl -IfExist Skip | Out-Null

Get-ChildItem master:\content\test\ | Remove-ItemLanguage -Language pl-pl

您的脚本可以像下面这样简单:

$path = "master:\content"
@(Get-Item $path) + (Get-ChildItem $path -Recurse) | Remove-ItemLanguage -Language "fr-CA"

答案 1 :(得分:1)

我将从以下开始:

$path = "master:\content"
@(Get-Item -Path $path -Language "fr") + @(Get-ChildItem -Path $path -Language "fr" -Recurse)

一旦您确定这是要删除的项目列表,就可以将这些结果传递给Remove-ItemLanguage

$path = "master:\content"
@(Get-Item -Path $path -Language "fr") + @(Get-ChildItem -Path $path -Language "fr" -Recurse) | Remove-ItemLanguage -Language "fr"

查看我们的Gitbook了解更多详情here。关于使用项目的部分包括按版本和语言进行获取。