在Powershell中,如何使用不同大小/类型的自定义对象创建数组?

时间:2014-08-05 13:21:48

标签: powershell foreach

我正在编写一个简单的函数,以列出特定服务器共享的子文件夹。我的问题是我想要在同一个自定义对象数组中的所有信息。这是我做的:

function Get-tDollar {

    param(

        [string]$srv

    )

    $share = Get-WmiObject -ComputerName $srv -Class Win32_Share -Filter "Name='share`$'" | Select __SERVER,@{n="nPath";e={"\\" + $_.__SERVER + ($_.Path -replace "C:")}}

    $inc = 0

    Get-ChildItem $share.nPath | % {

        $inc++
        Add-Member -InputObject $share -MemberType NoteProperty -Name "folder_$inc" -Value $_.Name

    }

    $share


}

我使用这个函数:@("srv1","srv2") | % { Get-TDollar -srv $_ }

当子文件夹的数量相同时,一切正常,但是当它们不同时,该数组仅包含第一个共享中列出的文件夹数。例如,对于我的两个第一台服务器,我有这个输出:

__SERVER                                                 nPath                                                    folder_1                                            
--------                                                 -----                                                    ------------                                            
srv1                                                 \\srv1\share                                     scripts                                                 
srv2                                                \\srv2\share                                     scripts 

但是,因为srv2的文件夹比第一台服务器多,所以我想要这个输出:

__SERVER                                                 nPath                                                    repertoire_1                                            repertoire_2
--------                                                 -----                                                    ------------                                            ------------
srv1                                                 \\srv1\share                                     scripts                                                 
srv2                                                \\srv2\share                                     scripts                                     config

我知道我可以先计算出哪个服务器的文件夹数量较多,然后将其置于fisrt位置,但似乎有足够的线路用于这样的事情。是否有更有效/更优雅的方式来做到这一点?

1 个答案:

答案 0 :(得分:1)

你被默认格式化gremlin:

所困扰

http://blogs.msdn.com/b/powershell/archive/2006/04/30/586973.aspx

Get-tDollar  | 
 foreach { $_ | format-table }