Powershell:如何将List内容输出为表格?

时间:2017-06-03 17:11:19

标签: powershell

我有一个对象的arraylist,但我想以表格格式将它们输出到控制台,如Get-Process为进程。

如何将List作为表格输出?

Format-Table只会抛出错误

$bulidsList | Format-Table -Auto -InputObject $bulidsList
  

"输入对象不能绑定到命令的任何参数,因为该命令不接受管道输入或输入及其属性与任何接受管道输入的参数都不匹配"

3 个答案:

答案 0 :(得分:2)

你在问题​​中提到过"对象的一个​​arraylist"。 这是一个简单的测试,向您展示如何使用Format-Table:

$a = @()
$a += [pscustomobject]@{a = 1; b = 2}
$a += [pscustomobject]@{a = 3; b = 4}
$a += [pscustomobject]@{a = 5; b = 6}

$a | Format-Table

这是输出:

a b
- -
1 2
3 4
5 6

答案 1 :(得分:1)

为什么同时使用pipe和-InputObject? (至少有一个我猜错了)

$bulidList | Format-Table

答案 2 :(得分:0)

我最近遇到这个问题。我想获取Azure虚拟机及其IP地址的列表并显示为表格。

第一个解决方案无效。

function Get-IpAddresses1{
   Write-Host "Private Ip Addresses"
   $privateIpAddress = New-Object System.Collections.ArrayList;
   Get-AzNetworkInterface | where {$_.VirtualMachine.Id -ne $null} | foreach {
      $privateIpAddress.Add(@{
          VirtualMachine = ($_.VirtualMachine.Id.Split('/') | select -Last 1)
          Ip = $_.IpConfigurations[0].PrivateIpAddress
      });
   }
   $privateIpAddress | Format-Table;
}

其结果如下。

Private Ip Addresses
0
1
2
3

Name                           Value
----                           -----
Ip                             10.0.1.5
VirtualMachine                 hemantcassandratest1
Ip                             10.0.1.6
VirtualMachine                 hemantcassandratest2
Ip                             10.0.1.7
VirtualMachine                 hemantcassandratest3
Ip                             10.0.0.4
VirtualMachine                 hemanttestvm

要摆脱要打印的索引,请将Add方法的返回值分配给临时变量。

 function Get-IpAddresses1{
   Write-Host "Private Ip Addresses"
   $privateIpAddress = New-Object System.Collections.ArrayList;
   Get-AzNetworkInterface | where {$_.VirtualMachine.Id -ne $null} | foreach {
      $temp = $privateIpAddress.Add(@{
          VirtualMachine = ($_.VirtualMachine.Id.Split('/') | select -Last 1)
          Ip = $_.IpConfigurations[0].PrivateIpAddress
      });
   }
   $privateIpAddress | Format-Table;
}

我现在得到如下结果。

Private Ip Addresses

Name                           Value
----                           -----
Ip                             10.0.1.5
VirtualMachine                 hemantcassandratest1
Ip                             10.0.1.6
VirtualMachine                 hemantcassandratest2
Ip                             10.0.1.7
VirtualMachine                 hemantcassandratest3
Ip                             10.0.0.4
VirtualMachine                 hemanttestvm

要获得符合我期望的结果,我不得不使用另一种语法来创建对象。

function Get-IpAddresses{
  Write-Host "Private Ip Addresses"
  $privateIpAddress = New-Object System.Collections.ArrayList;
  Get-AzNetworkInterface | where {$_.VirtualMachine.Id -ne $null} | foreach {
      $temp = $privateIpAddress.Add((New-Object PSObject -Property @{ 
       VirtualMachine= ($_.VirtualMachine.Id.Split('/') | select -Last 1); 
       Ip=$_.IpConfigurations[0].PrivateIpAddress}));
  }
  $privateIpAddress | Format-Table;
}

现在结果如下。

Private Ip Addresses

Ip       VirtualMachine
--       --------------
10.0.1.5 hemantcassandratest1
10.0.1.6 hemantcassandratest2
10.0.1.7 hemantcassandratest3
10.0.0.4 hemanttestvm

干杯, 赫曼特(Hemant)