【问题标题】:Include unc path in file size output from powershell在 powershell 的文件大小输出中包含 unc 路径
【发布时间】:2018-06-20 19:18:52
【问题描述】:

我对 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 文件中,这也是有益的。到目前为止所有的尝试都是徒劳的。

谢谢, 艾伦

【问题讨论】:

    标签: powershell output unc


    【解决方案1】:

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

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

    首先,修改你的函数:

    • 接受包含目标路径的文件作为参数
    • 输出 custom 对象,这些对象的 .Path 属性包含手头的文件路径,.Size 属性包含作为 数字 的聚合大小(键入 @987654326 @。
    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 参数控制输出文件的字符编码。

    要为显示生成友好的表格输出,您可以使用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 输出导出到Export-CsvExport-CliXml 等cmdlet,甚至是ConvertTo-Json 等转换cmdlet。

    【讨论】:

    • @phemor:我已经重写了答案,更加关注数据和格式的分离,所以我不再使用Select-Object。虽然我仍然无法解释您的症状,但我怀疑新的解决方案会让它消失。
    【解决方案2】:

    您似乎将 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'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多