在 powershell 的文件大小输出中包含 unc 路径

Include unc path in file size output from powershell

我是 Powershell 的新手。我有一个 txt 文件,其中包含目录的 UNC 路径子集,我需要确定每个目录的大小。我想出了以下按预期工作但我有几个问题。

FUNCTION FileSize
{$DB = Get-Content 'C:\path\path\path\path\paths2.txt'
foreach ($Data in $DB) 
{"{0:N2} GB" -f ((Get-ChildItem "$Data" -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1GB)}}

我需要为此添加查看大小读数所属的 UNC 路径的功能,并且我还可以将结果输出到 txt 文件,这也很有用。到目前为止所有的尝试都是徒劳的。

谢谢, 艾伦

您似乎在 $Data 中存储了 UNC 路径信息,因此您可以将其添加到输出字符串的前面。将整个循环的输出保存在一个变量中,您可以通过管道将其导出到 Out-FileAdd-ContentSet-Content.

function FileSize {
    $DB = Get-Content 'C:\path\path\path\path\paths2.txt'
    $Sizes = foreach ($Data in $DB) {
        "$Data : {0:N2} GB" -f ((Get-ChildItem "$Data" -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1GB)
    }
    $Sizes | Out-File 'C:\path\path\path\path\out.txt'
}

提供了一种有效的解决方案,可以直接在 FileSize 函数内执行输出格式化。

或者,为了获得更大的灵活性,考虑重构您的方法,以便分离数据收集输出格式:

首先,修改你的函数:

  • 接受包含目标路径的文件作为参数
  • 输出自定义对象,其中.Path属性包含手边的文件路径,.Size属性包含数字 的聚合大小(类型 [double].
Function FileSize {
  param(
    [string] $PathsFile
  )
  foreach ($path in Get-Content $PathsFile) {
    [pscustomobject] @{
      Path = $path
      Size = (Get-ChildItem -File $path -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum
    }
  }
}

函数的纯数据输出让您稍后决定如何格式化数据以及将其保存在何处:

ForEach-Object 调用中使用 BenH 的方法:

 FileSize 'C:\path\path\path\path\paths2.txt' |
   ForEach-Object { '{0} : {1:N2} GB' -f $_.Path, ($_.Size/1GB) }

例如,您可以简单地附加 > out.txt 以将输出保存在文件中;或者,通过管道传输到 Out-FileSet-Content 允许您使用 -Encoding 参数控制输出文件的字符编码。

要为 display 生成友好的表格输出,您可以使用 :

管道到 Format-Table
 FileSize 'C:\path\path\path\path\paths2.txt' |
   Format-Table Path, @{ n='Size'; e={ '{0:N2} GB' -f ($_.Size/1GB) } }

最后,为了进一步 程序化 处理,您可以通过管道 FileSize 输出来导出 cmdlet,例如 Export-CsvExport-CliXml 甚至转换cmdlet,例如 ConvertTo-Json.