我对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文件中,这也将有所帮助。到目前为止,所有尝试都是徒劳的。
谢谢, 艾伦
答案 0 :(得分:2)
BenH's helpful answer提供了一种有效的解决方案,可以直接在FileSize
函数内部执行输出格式化。
或者,为了获得更大的灵活性,考虑重构您的方法,以便分离数据收集和输出格式的各个方面< / strong>:
首先,修改您的功能:
.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-File
或Set-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-Csv
和Export-CliXml
)或什至转换cmdlet(例如{{ 1}}。
答案 1 :(得分:1)
似乎您已将UNC路径信息存储在$Data
中,因此可以将其添加到输出字符串的前面。将整个循环的输出保存到变量中,然后可以通过管道传输到Out-File
,Add-Content
或Set-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'
}