Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在powershell输出的文件大小中包含unc路径_Powershell_Output_Unc - Fatal编程技术网

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

在powershell输出的文件大小中包含unc路径,powershell,output,unc,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

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

谢谢,
Allan

您似乎在
$Data
中存储了UNC路径信息,因此可以将其添加到输出字符串的前面。将整个循环的输出保存在变量中,您可以通过管道将其导出到
输出文件
添加内容
、或
设置内容

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]
然后,该函数的“仅数据”输出允许您稍后决定如何格式化数据以及在何处保存数据:

在调用
ForEach对象时使用BenH的方法:

 FileSize 'C:\path\path\path\path\paths2.txt' |
   ForEach-Object { '{0} : {1:N2} GB' -f $_.Path, ($_.Size/1GB) }
例如,您可以简单地附加
>out.txt
,以将输出保存在文件中;或者,管道到
out file
设置内容
允许您使用
-encoding
参数控制输出文件的字符编码

要生成友好的表格输出以供显示,您可以使用管道将表格设置为
格式


最后,对于进一步的编程处理,您可以通过管道
文件大小
输出导出cmdlet,如
导出Csv
导出CliXml
,甚至是转换cmdlet,如
转换为Json

@phemor:我重新编写了答案,以便更多地关注数据和格式的分离,因此我不再是我们ing
选择对象
。虽然我仍然无法解释您的症状,但我怀疑新的解决方案会让它消失。
 FileSize 'C:\path\path\path\path\paths2.txt' |
   ForEach-Object { '{0} : {1:N2} GB' -f $_.Path, ($_.Size/1GB) }
 FileSize 'C:\path\path\path\path\paths2.txt' |
   Format-Table Path, @{ n='Size'; e={ '{0:N2} GB' -f ($_.Size/1GB) } }