从Powershell输出的文件大小中包含unc路径

时间:2018-06-20 19:18:52

标签: powershell output unc

我对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路径的功能,并且f i还可以将结果输出到txt文件中,这也将有所帮助。到目前为止,所有尝试都是徒劳的。

谢谢, 艾伦

2 个答案:

答案 0 :(得分:2)

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

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

首先,修改您的功能:

  • 接受包含目标路径的文件作为参数
  • 输出 custom 对象,这些对象的.Path属性包含手边的文件路径,.Size属性包含聚合大小为 number (键入[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 生成友好的表格输出,可以使用calculated property通过管道传输到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(例如{{ 1}}。

答案 1 :(得分:1)

似乎您已将UNC路径信息存储在$Data中,因此可以将其添加到输出字符串的前面。将整个循环的输出保存到变量中,然后可以通过管道传输到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'
}