Powershell 获取FolderItem版本以获取所有文件夹

Powershell 获取FolderItem版本以获取所有文件夹,powershell,robocopy,Powershell,Robocopy,我发现了一个cmdlet,它返回所有文件,而不考虑路径大小。我想知道是否有一个同等的命令可以获取所有文件夹,而不考虑路径大小 结合robocopy和powershell返回所有文件,即使是路径大于260的文件 是否仍要获取文件共享中的所有文件夹get FolderItem使用robocy开关/NDL从日志输出中排除目录,它使用这些目录获取文件信息。它还通过使用/S开关递归而不是/E来避免空文件夹 只需将$params变量更改为: $params.AddRange(@("/L","/S","/NJ

我发现了一个cmdlet,它返回所有文件,而不考虑路径大小。我想知道是否有一个同等的命令可以获取所有文件夹,而不考虑路径大小

结合robocopy和powershell返回所有文件,即使是路径大于260的文件


是否仍要获取文件共享中的所有文件夹

get FolderItem
使用
robocy
开关
/NDL
从日志输出中排除目录,它使用这些目录获取文件信息。它还通过使用
/S
开关递归而不是
/E
来避免空文件夹

只需将
$params
变量更改为:

$params.AddRange(@("/L","/S","/NJH","/BYTES","/FP","/NC","/NDL","/TS","/XJ","/R:0","/W:0")) $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“^(?\d+)\s(?\s+\s\s+)\s+(?*)”{
$object=新对象PSObject-属性@{
ParentFolder=$matches.fullname-替换“(.\\).*”,“$1”
FullName=$matches.FullName
Name=$matches.fullname-替换“.*\\(.*)”,$1
长度=[int64]$matches.Size
LastWriteTime=[datetime]$matches.Date
扩展名=$matches.fullname-替换“.*\”(.*)“,$1”
FullPathLength=[int]$matches.FullName.Length
}
$object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
写入输出$object
}

如果($.Trim()-match“^(?\d+)\s+(?*)”{
$object=新对象PSObject-属性@{
ParentFolder=$matches.fullname-替换“(.\\).*”,“$1”
FullName=$matches.FullName
Name=$matches.fullname-替换“.*\\(.*)”,$1
}
$object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
写入输出$object
}
这应该可以做到

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
}