当path属性等于另一个数组中的object时,从数组中删除对象

时间:2016-08-19 10:08:00

标签: powershell

我有一个$array PSCustomObjects,其中包含路径,天数,过滤器和递归属性

Test-Path每个PSCustomObject的路径,如果它是false,我只保存另一个变量中的路径,例如$failpath

现在我想删除路径在$array内的$failpath内的所有对象

我为.remove()尝试了类似$array方法的内容,但这不起作用并且给了我这个错误(来自网络的示例图片):https://i0.wp.com/www.sapien.com/blog/wp-content/uploads/2014/11/image8.png

所以我尝试创建一个新数组,但它让我很难,因为我不知道如何正确迭代失败路径。所以每个正确的对象只被发送到新的数组一次(当我尝试它时,正确的对象有多次) - 我无法显示这个代码,因为我已经编辑了太多次,现在它只是一团糟。

这是$array$faultypath的样子

$array = @(
    [pscustomobject]@{
        path    = "\\server\daten\Alle Adressen\Dokumente 70"
        filter  = "*.pdf"
        days    = "90"
        recurse = "false"
    }
    [pscustomobject]@{
        path    = "\\server\Tobit\itacom\ERP2UMS"
        filter  = "*.fax"
        days    = "7"
        recurse = "false"
    }
)

[string[]]$faultypath = @()
$pfade | % { if (!(Test-Path $_.path)) { $faultypath += $_.path } }

如何从$faultypath

中减去$array中的所有内容?

1 个答案:

答案 0 :(得分:3)

适用于PowerShell 3或更高版本

$faultyPath = $pfade | Where-Object { -not (Test-Path $_.Path) } | ForEach-Object Path
$array | Where-Object Path -notin $faultyPath

对于PowerShell 2或更低版本

$faultyPath = $pfade | Where-Object { -not (Test-Path $_.Path) } | ForEach-Object { $_.Path }
$array | Where-Object { $faultyPath -notcontains $_.Path }

如果两个集都很大,这可能是一个昂贵的数组比较。在这种情况下,字典或哈希表将为比较提供更好的性能。