从文件中删除文件版本

时间:2017-08-08 19:26:55

标签: powershell powershell-v2.0 powershell-v3.0 powershell-v4.0

我正在尝试写下powershell脚本,该脚本应该从文件夹tour中的所有文件中删除项目版本或语言版本“en”,如果它在文件中找到“Title”部分。

我的脚本只在标题为空的循环中使用顶级文件名,但在标题为空的循环中的其他文件上不起作用。如何更改此脚本以便它可以滚动循环并从标题为空的每个不同文件中删除语言版本?

$SN1 = Get-ItemProperty -Path "master:/content/www/home/company/tour/*"  -Name "Title" 

$SN2 = ''

$SN3 = 
 foreach ($SItem in $SN1.Title) {

     if ("$SItem" -eq $SN2)
     {
        Remove-ItemVersion  -Path "master:/content/www/home/company/tour/*" -Language "en"
     }

 }

2 个答案:

答案 0 :(得分:0)

看起来您的基本语法技能可能需要进行一些额外的研究,因为您在测试的变量周围引用并且错误地使用标题的语法。

首先,改变:

 if ("$SItem" -eq $SN2)

要:

 if (!($SItem))

然后,SN1只是你写的标题,所以试图做$ SN1.title根本不会工作。另外,您要查询的来源是什么?

编辑:下面回答:

现在你提供了对象类型,很明显。这是代码,但您需要验证删除的内容是正确的键/值:

$SN1 = Get-ItemProperty -Path "master:/content/www/home/company/tour/*" -Name "Title"    
if ($SN1.Title -eq '')
{
    Remove-ItemVersion -Path "master:/content/www/home/company/tour/*" -Language "en"       
}

除非我遗漏了某些东西,否则基于Get-Member $ SN1是一个单项,所以不需要循环任何东西。如果某处有多个,我在代码中没有看到指示,因此您需要提供更多详细信息。此命令读取单个标题,如果为空,则删除其他内容。对于标题集合,您需要提供他们居住的地方等,以获得更多帮助。

答案 1 :(得分:0)

我不确定您选择的路径,Get-ItemProperty不能在其路径中使用*来选择路径中的每个项目。您必须先获取项目,然后将它们传递到Get-ItemProperty。

您需要创建一个包含每个项目及其属性的数组,然后循环遍历这些项目。

$SN1 = Get-ChildItem -Path ""master:/content/www/home/company/tour" | Get-ItemProperty | select *

然后遍历每个项目:

 $DebugPreference = 'Continue'
 foreach ($SItem in $SN1) 
 {
     Write-Debug -Message "Checking item $($SItem.Name) for a title."
     if(!($SItem.Title))
     {
        Write-Debug -Message "A title does not exist for this item $($SItem.FullName), removing the language property of its ItemVersion."
        Remove-ItemVersion -Path $SItem.FullName -Language "en"
     }

 }

作为注释,如果您还要搜索子目录,则需要在Get-ChildItem上使用-Recurse。