PowerShell Get-ChildItem-路径太长

PowerShell Get-ChildItem-路径太长

我一直在尝试格式化我的输出表Get-ChildItem命令的输出表。

我已经创建了一个脚本来扫描定义的目录$Source以搜索由$Months和定义的文件$Size定义的文件。这工作正常,但有些目录的长度超过 248 个字符,我收到文件路径太长的错误。

所以我不想包括$Source在将其输出到表中的目录列时不包括路径。

例如我想看到这个:

| file1.csv | Last Write Access | .\Desktop\Folder1 |  
| file2.txt | Last Write Access | .\Desktop\Folder2 |

当 $Source 定义为C:\users\User1

这是我当前的代码:

$Source = "C:\Users\User1"
$Months = "24"
$Size = 10MB
$OutSource = "C:\Export"
$LogName = "Export"
$Ext = "csv"

$Date = (Get-Date).AddMonths(-$Months)

Get-ChildItem -Path "$Source\*.*" -Recurse -Force | `
    Where-Object {$_.LastAccessTime -lt $Date -and $_.Length -gt $Size} | `
        Format-Table -AutoSize -Property Name, LastWriteTime, LastAccessTime, Directory | `
            Out-String -Width 4096 | `
                Out-File $OutSource\$LogName.$Ext

答案1

还有另外 2 个解决方案

从 Windows 10 / Windows Server 2016(Build 1607 或更高版本)开始,您可以使用它来删除

Set-ItemProperty 'HKLM:\System\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -value 1

如果您正在使用PowerShell 5.1或以上版本,则可以使用

get-childitem -LiteralPath

因此在这种情况下你需要定义$Source = "\\?\C:\Users\User1"并替换Get-ChildItem -Path "$Source\*.*" -Recurse -ForceGet-ChildItem -LiteralPath "$Source\*.*" -Recurse -Force

答案2

经过广泛的搜索和反复试验后,我找到了解决问题的方法。

由于无法截断路径的第一部分,因此我添加了一行代码来创建临时网络驱动器来执行截断。

使用的代码:

New-PSDrive "X" -PSProvider FileSystem -Root "$Source"

并改变了

Get-ChildItem -Path "$Source\*.*" -Recurse -Force | `

Get-ChildItem -Path "X:\*.*" -Recurse -Force | `

所以我当前的输出有点像我所追求的:

| file1.csv | Last Write Access | X:\Desktop\Folder1 |
| file2.txt | Last Write Access | X:\Desktop\Folder2 |

相关内容