我一直在尝试格式化我的输出表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 -Force
为Get-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 |