2015-09-06 102 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 
} 

而且应该这样做