У меня проблемы с выводом моего скрипта, отображающего информацию так, как я бы этого хотел. Я хотел бы просмотреть соответствующие свойства (объекты создаются в цикле foreach, поэтому они всегда будут иметь одинаковые свойства) каждого сгенерированного пользовательского объекта в одной таблице вместо создания новой таблицы для каждого объекта, как в настоящее время приведен ниже скрипт делает. Это возможно с тем, как этот сценарий создает объект? Если так, как это будет сделано?

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 {}
}

1 ответ1

0

Проблема в том, что вы вызываете Format-Table для каждого объекта во время его отображения. Удалите это, и все готово.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .