创建表格显示Foldername和文件计数

时间:2018-01-30 10:37:40

标签: powershell

我正在尝试创建一个脚本,该脚本基于目录列表生成一个列表或表格,显示每个文件夹中包含的文件的“文件夹名称”和“计数”。

到目前为止,我有以下内容:

$folders = @("c:\temp", "C:\temp\tosh")

foreach ($folder in $folders) {
    $folderFiles = Get-ChildItem -Path $folder -File
    $obj = New-Object psobject -Property @{
        Folder = $folder
        Count = $folderFiles.count
    }
    $obj | Format-Table
}

这可以有效地生成两个表,每个表对应一个文件夹。我需要这个作为一个表,但当我尝试向对象添加另一行时,我得到PSObject does not contain a method named 'op_Addition'的错误。我确信之前我有一个类似的结果是在每次迭代时将$obj对象添加到数组中:

$results += $obj

但目前似乎无法让它发挥作用。感谢任何建议,谢谢。

3 个答案:

答案 0 :(得分:1)

您需要先将$results定义为类型array,然后才能为数组添加值。如果您不这样做,则$results将为System.Object BaseType,因此会出错。试试这个。

$folders = @("c:\temp", "C:\temp\tosh")
$results = @()
foreach ($folder in $folders) {
    $folderFiles = Get-ChildItem -Path $folder -File
    $obj = New-Object psobject -Property @{
        Folder = $folder
        Count = $folderFiles.count
    }
    $results += $obj
}
$results

答案 1 :(得分:0)

Vivek's answer会告诉你你想要的东西。

您可以更进一步,避免初始化空数组和使用临时对象。这使用了pscsutomobject类型加速器。

$folders = @("c:\temp", "C:\temp\tosh")

foreach ($folder in $folders) {
    [array]$results += [pscustomobject]@{
        Folder = $folder
        Count = (Get-ChildItem -Path $folder -File).count
    }
}
$results

我看到你的循环中有$obj | Format-Table。你最后可以$results | Format-Table

答案 2 :(得分:0)

ls \ temp,\ temp \ tosh \ | group psparentpath |选择计数,名称