2012-08-13 127 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