嘿伙计们,我有一个让我疯狂的Powershell 2.0问题。我的目标:创建一个脚本,该脚本确定Documents文件夹的大小以及同一行上的当前用户,但是在csv文件中的两个不同字段中。到目前为止,我尝试了以下脚本:
$startFolder= "C:\Users\$env:username\Documents"
$docinfo = Get-ChildItem $startFolder -recurse | Measure-Object -property length -sum |
$docinfo | Export-Csv -Path C:\MyDocSize\docsize.csv -Encoding ascii -NoTypeInformation
此脚本可以工作并导出文件夹大小(总和),以及一些我不需要的列,"平均值,最大值,最小值以及具有"长度&#的属性列34;作为一种价值。有谁知道如何只显示总和列而不是其他东西?不过我的主要问题是,如何通过" $ env:username"进入" $ docinfo"然后得到" $ docinfo"将其作为附加列传递给CSV,并在与测量值相同的行中传递一个附加值?
我试过了:
$startFolder= "C:\Users\$env:username\Documents"
$docinfo = Get-ChildItem $startFolder -recurse | Select-Object $env:username
$docinfo | Export-Csv -Path C:\MyDocSize\docsize.csv -Encoding ascii - NoTypeInformation
这会将当前用户名仅传递给csv文件,但没有列名,然后我就无法弄清楚如何将测量值与此结合起来。此外,我甚至不确定为什么会传递用户名,因为如果我采用" Get-ChildItem $ startFolder -recurse"它将停止工作。
我也试过这个剧本:
$startFolder= "C:\Users\$env:username\Documents"
$docinfo = Get-ChildItem $startFolder -recurse | Measure-Object -property length -sum
New-Object -TypeName PSCustomObject -Property @{
UserName = $env:username
DocFolderSize = $docinfo
} | Export-Csv -Path C:\MyDocSize\docsize.csv -Encoding ascii -NoTypeInformation
此脚本将使用列名" UserName"很好地传递用户名,但是在" DocFolderSize"列而不是测量值我得到这个字符串:Microsoft.PowerShell.Commands.GenericMeasureInfo
不确定现在该做什么或如何解决这个问题,我真的很感激任何帮助!谢谢阅读。
答案 0 :(得分:1)
试一试“
Get-ChildItem $startFolder -Recurse | Measure-Object -property length -sum | Select Sum, @{Label="username";Expression={$env:username}}
@{Label="username";Expression={$env:username}}
可让您设置自定义列标题和值。
您可以使用相同的技术自定义Sum列:
Get-ChildItem $startFolder -Recurse | Measure-Object -property length -sum | Select @{Label="FolderSize";Expression={$_.Sum}}, @{Label="username";Expression={$env:username}}
如果您想以MB显示文件夹大小:
Get-ChildItem $startFolder -Recurse | Measure-Object -property length -sum | Select @{Label="FolderSize";Expression={$_.Sum / 1MB}}, @{Label="username";Expression={$env:username}}