2015-09-06 101 views
1

我發現一個無論路徑大小如何都會返回所有文件的cmdlet。我想知道是否有一個等價的命令獲得所有的文件夾,而不管路徑大小嗎?Get-FolderItem版本獲取所有文件夾

Get-FolderItem結合ROBOCOPY和PowerShell,甚至返回所有這些文件的路徑大於260

反正是有得到所有的文件夾中的文件共享

回答

1

Get-FolderItem使用robocopy開關/NDL排除目錄從日誌輸出,它用來抓取文件信息。它還使用/S開關遞歸而非/E

避免空文件夾簡單地改變從$params變量:

$params.AddRange(@("/L","/S","/NJH","/BYTES","/FP","/NC","/NDL","/TS","/XJ","/R:0","/W:0"))

$params.AddRange(@("/L","/E","/NJH","/BYTES","/FP","/NC","/NFL","/TS","/XJ","/R:0","/W:0"))

現在的Robocopy將列出目錄,而不是文件。由於目錄的輸出與文件有所不同,因此您還必須稍微更改解析邏輯。

變化

If ($_.Trim() -match "^(?<Size>\d+)\s(?<Date>\S+\s\S+)\s+(?<FullName>.*)") { 
    $object = New-Object PSObject -Property @{ 
     ParentFolder = $matches.fullname -replace '(.*\\).*','$1' 
     FullName = $matches.FullName 
     Name = $matches.fullname -replace '.*\\(.*)','$1' 
     Length = [int64]$matches.Size 
     LastWriteTime = [datetime]$matches.Date 
     Extension = $matches.fullname -replace '.*\.(.*)','$1' 
     FullPathLength = [int] $matches.FullName.Length 
    } 
    $object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo') 
    Write-Output $object 
} 

If ($_.Trim() -match "^(?<Children>\d+)\s+(?<FullName>.*)") { 
    $object = New-Object PSObject -Property @{ 
     ParentFolder = $matches.fullname -replace '(.*\\).*','$1' 
     FullName = $matches.FullName 
     Name = $matches.fullname -replace '.*\\(.*)','$1' 
    } 
    $object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo') 
    Write-Output $object 
} 

而且應該這樣做