【问题标题】:Passing multiple variables to Export-CSV in Powershell在 Powershell 中将多个变量传递给 Export-CSV
【发布时间】:2014-12-13 07:26:27
【问题描述】:

大家好,我遇到了一个让我发疯的 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

这个脚本工作并导出文件夹大小(总和),以及一些我不需要的列,“平均值、最大值、最小值和一个以“长度”为值的属性列。有谁知道如何只显示总和列而不显示其他内容?但是,我的主要问题是,如何将“$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

不知道现在该做什么或如何解决这个问题,我非常感谢任何帮助!谢谢阅读。

【问题讨论】:

    标签: variables powershell csv scripting export-to-csv


    【解决方案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}}
    

    【讨论】:

    • 谢谢!这可行,但是如果我只选择 sum 它以“@{Sum=10915869}”的形式导出到 csv,我怎么才能得到这个数字?非常感谢您的帮助。
    • 没关系,只有当我用我的对象尝试它时它才会显示,"$startFolder= "C:\Users\$env:username\Documents" Get-ChildItem $startFolder -Recurse | Measure -Object -property length -sum | 选择总和,@{Label="username";Expression={$env:username}} | Export-Csv -Path C:\MyDocSize\info.csv\MyDocSize\info.csv -Encoding ascii -NoTypeInformation" 这很完美,而且比我所拥有的要简单得多。非常感谢,非常感谢!
    • 还有一个问题,如何自定义 Sum 列名称? "Get-ChildItem $startFolder -Recurse | Measure-Object -property length -sum | @{Label="MyDocSize";Expression={Select Sum}}, @{Label="username";Expression={$env:username} } | Export-Csv -Path C:\MyDocSize\info.csv -Encoding ascii -NoTypeInformation" 抛出“表达式只允许作为管道的第一个元素”错误
    • 添加到答案中。这应该可以满足您的需求。
    • 如果你还在看这个,有没有办法在那个表达式中将总和从字节更改为 MB?你已经帮了我很多,我不想要求更多,但如果可以的话,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 2023-01-02
    • 2020-10-03
    • 2012-07-24
    • 2017-09-22
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多