我有一个$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
中的所有内容?
答案 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 }
如果两个集都很大,这可能是一个昂贵的数组比较。在这种情况下,字典或哈希表将为比较提供更好的性能。