0

我想记下PowerShell脚本,它应该从位于文件夹漫游中的所有文件中删除项目版本或语言版本“en”,如果它找到文件中的“标题”部分。从文件中删除文件版本

我的脚本只在标题为空的循环中的顶层文件名上工作,而不在其标题为空的循环中的其他文件上。我怎样才能改变这个脚本,以便它可以滚动循环,并从标题为空的这些不同文件中删除语言版本?

$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" 
    } 

} 

回答

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"  
} 

除非我失去了一些东西的基础上,获取会员$ SN1是一个单一的项目,所以没有必要循环任何东西。如果有不止一个地方,我没有看到你的代码中的指示,所以你需要提供更多的细节。该命令读取单个标题,如果为空,则删除其他内容。对于标题集合,您需要提供他们居住的地方等,以获得更多帮助。

+0

正确,因为您的语法不正确。你可能会粘贴下面的命令输出给我吗?: $ SN1 = Get-ItemProperty -Path“master:/ content/www/home/company/tour/*”-Name“Title” $ SN1 |通用汽车 对不起本站的评论friggin包裹是你的原始第一行上面的2个命令来定义$ SN1,然后运行第二个命令是管道$ SN1 | Get-Member –

+0

您需要运行命令我要求输入$ SN1来获取成员,我需要查看返回的是哪种对象,然后我可以用正确的代码来帮助您。那些下面发布的代码我可以告诉你是不正确的,因为他们也不知道什么对象类型被返回,所以他们猜测。运行:“$ SN1 | Get-member”并发布输出请 –

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" 
    } 

} 

正如你会想,如果你有你想通过和搜索子目录使用-Recurse上运行Get-ChildItem的说明。

+0

@ user7986299我更新了代码,出现错误,应该是.FullName,而不是.FullPath。 – Paolis

+0

您必须将代码发布到Remove-ItemVersion,这不是我熟悉的本机Powershell命令。它有可能期望与我们提供的路径不同,或者需要额外的参数。另外,你应该添加调试消息来帮助你知道你的代码在做什么。我已经在上面添加了示例。 – Paolis