2012-08-13 209 views
2

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

$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及其$子目录?

回答

0

以下为我工作:

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

什么我最终是$path$path所有子目录。

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

+0

我有$ Path = \\ share \放置两个子目录,例如调入和调出。当我运行你的建议时,我仍然得到$ containers = {in,out},而不是{\\ share \ place,in,out}。这很混乱。 – archcutbank 2012-08-13 20:24:12

+0

如果你想要全名,那么你需要选择全名:$ containers = Get-ChildItem -path $ Path -recurse | Where-object {$ _。psIscontainer} |选择对象FullName – EBGreen 2012-08-13 20:38:30

3

在您第一次调用get-item时,您并未将结果存储在数组中(因为它只有一个项目)。这意味着你不能在你的get-childitem行中追加数组。

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

这似乎工作。 – archcutbank 2012-08-14 18:04:35

1

使用Get-Item获取父路径和Get-ChildItem获取父儿童:通过简单地包裹在@()这样的结果迫使你的容器变量是一个数组

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

我试过这个:$ containters = $ parent,$ child,但是你得到的是$ containers = {upgrade},{in,out} - 因为两个数组添加到$ containers。 – archcutbank 2012-08-14 13:18:25

+0

尝试︰$ containers = $ child + $ parent – 2012-08-14 14:00:36

+0

@ShayLevy我不认为这将工作,因为你试图将一个数组添加到字符串。但是这应该是:$ containers = @($ child)+ $ parent – zdan 2012-08-14 20:25:55

相关问题