优先排序" $ _。姓名"结束" $ _。LastAccessTime"

时间:2015-11-02 15:50:08

标签: powershell operator-precedence

我创建了一个脚本,允许我从Remove-Item语句中搜索和忽略目录,而脚本可以,但不一定在我需要的范围内。

Get-ChildItem -Path $Path |
  Where-Object {
    ($_.LastAccessTime -lt $Limit) -and
    -not ($_.PSIsContainer -eq $True -and $_.Name -contains ("2013","2014","2015"))
  } | Remove-Item -Force -Recurse -WhatIf

此脚本当前正在查找和删除所有

对象
  1. 未在指定时间段内访问
  2. 但我需要这个脚本才能找到并删除所有

    的对象
    1. 未在指定时间段内访问并且
    2. 排除名称为" 2013"," 2014"或" 2015"的目录。
    3. 我并不是说脚本没有正常工作",但我的问题的论点是:

      如何编程此脚本以首先查看目录名称,然后查看上次访问日期?我不知道在何处以及如何告诉此脚本$_.Name需要优先于$_.LastAccessTime -lt $Limit

1 个答案:

答案 0 :(得分:1)

目前您的情况逻辑是:

  

删除$Limit之前上次访问过的对象,而不是名称中包含数组的文件夹[" 2013"," 2014"," 2015&#34 ;。]

第二个条件永远不会成立,因为字符串永远不能包含字符串数组。

此外,最后修改时间存储在LastWriteTime属性中。

你真正想要的是这样的:

Where-Object {
  $_.LastWriteTime -lt $Limit -and
  -not ($_.PSIsContainer -and $_.Name -match '2013|2014|2015')
}

如果目录名只包含年份而没有别的,你也可以使用它:

Where-Object {
  $_.LastWriteTime -lt $Limit -and
  -not ($_.PSIsContainer -and '2013','2014','2015' -contains $_.Name)
}

请注意最后一个子句(array -contains value)的颠倒顺序。