O problema é que você está chamando Format-Table em cada objeto enquanto os exibe. Remova isso e você está pronto.
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 {}
}
O problema é que você está chamando Format-Table em cada objeto enquanto os exibe. Remova isso e você está pronto.
Tags powershell