У меня проблемы с выводом моего скрипта, отображающего информацию так, как я бы этого хотел. Я хотел бы просмотреть соответствующие свойства (объекты создаются в цикле 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 {}
}