Powershell - Exibe propriedades de objetos personalizados correspondentes em uma única tabela

0

Estou tendo problemas com a saída do meu script exibindo as informações da maneira que gostaria. Eu gostaria de ver as propriedades correspondentes (objetos são gerados em um loop foreach, então eles sempre terão exatamente as mesmas propriedades) de cada objeto personalizado gerado em uma tabela, em vez de criar uma nova tabela para cada objeto como o script abaixo atualmente faz. Isso é possível com a maneira como esse script cria o objeto? Se sim, como seria feito?

function Get-Uptime
{
[CmdletBinding()]
Param
(
    [Parameter(ValueFromPipeline=$true,
               Position=0)]
    [String[]]$ComputerName = $env:COMPUTERNAME
)

Begin {}
Process {
   foreach ($computer in $ComputerName) {
       $ComputerObject = [Ordered]@{"Computer Name" = $computer
                                    "Start Time" = $null
                                    "Uptime (Days)" = $null
                                    "Status" = $null
                                    "May Need Patched?" = $null}
       $IsOnline = Test-Connection -ComputerName $Computer -Quiet
       if ($IsOnline = $true) {
           Try { 
           #Collect information about each computer
           $WMIObject = Get-WMIObject -Class Win32_OperatingSystem -ComputerName $computer
           #Convert LastBootUpTime to readable date/time
           $ComputerObject.'Start Time' = $WMIObject.ConvertToDateTime($WMIObject.LastBootUpTime)
           #Convert LocalDateTime to readable date/time
           $ComputerObject.Uptime = $WMIObject.ConvertToDateTime($WMIObject.LocalDateTime)
           #Collect the number of days that have elapsed between
           $TimeElapsed = New-TimeSpan -Start $ConvertedBootUpTime -End $ConvertedLocalTime
           $ComputerObject.'Uptime (Days)' = [Math]::Round($TimeElapsed.TotalDays,1) 
           $ComputerObject.'May Need Patched?' = If ($ComputerObject.'Uptime (Days)' -ge "30"){$True} Else{$False}
           $ComputerObject.Status = "Online"
           }
           Catch {
           Write-Error "Unable to gather uptime for $Computer"
           $ComputerObject.Status = "Error"
           }
       }
       else {
           Write-Error "Computer $Computer is either non-existant or offline"
           $ComputerObject.Status = "Offline"
       }
       [PSCustomObject]$ComputerObject | ft
       }
}
End {}
}
    
por Derek A 11.03.2016 / 03:37

1 resposta

0

O problema é que você está chamando Format-Table em cada objeto enquanto os exibe. Remova isso e você está pronto.

    
por 11.03.2016 / 12:25

Tags