将Get-Item与Get-ChildItem结合使用?

时间:2012-08-13 19:53:26

标签: powershell

我以为我收到了所有的容器 $containers = Get-ChildItem -path $Path -recurse | ? {$_.psIscontainer -eq $true}, 但它似乎只返回我$Path的子目录。我真的希望$containers包含$Path及其子目录。我试过这个:

$containers = Get-Item -path $Path | ? {$_.psIscontainer -eq $true}
$containers += Get-ChildItem -path $Path -recurse | ? {$_.psIscontainer -eq $true}

但它不允许我这样做。我是否使用Get-ChildItem错误,或者如何通过将Get-Item和Get-ChildItem与-recurse组合来获取$ container以包含$Path及其$子目录?

3 个答案:

答案 0 :(得分:4)

在第一次调用get-item时,您不会将结果存储在数组中(因为它只有1项)。这意味着您无法在get-childitem行中将数组附加到其中。通过将结果包装成@(),只需将您的容器变量强制为数组:

$containers = @(Get-Item -path $Path | ? {$_.psIscontainer})
$containers += Get-ChildItem -path $Path -recurse | ? {$_.psIscontainer}

答案 1 :(得分:1)

使用Get-Item获取父路径,Get-ChildItem获取父路径:

$parent = Get-Item -Path $Path
$child = Get-ChildItem -Path $parent -Recurse | Where-Object {$_.PSIsContainer}
$parent,$child

答案 2 :(得分:0)

以下对我有用:

$containers = Get-ChildItem -path $Path -recurse | Where-object {$_.psIscontainer}

我最终得到的是$path以及$path的所有子目录。

在您的示例中,您有$.psIscontainer但它应该是$_.psIscontainer。这可能也是你的命令的问题。