Объединение результатов из переменных в хеш-таблицу и отображение всех значений - PullRequest
0 голосов
/ 13 июня 2019

Мои коды ниже собирают время загрузки, спецификации сервера, диски и т. Д. И хранятся в нескольких переменных. Затем я добавляю их в новый объект, чтобы красиво отобразить результаты. Проблема с отображением результатов на дисках, я не против, чтобы она отображала все диски в одном столбце, но не все диски. Использование Format-table -autosize не решает проблему. Если я не могу уместить все значения в одном столбце, каков правильный подход для динамического отображения буквы дисков в собственном назначенном поле. IE; Столбец 1 для значения диска 1, Столбец 2 для значения диска 2 ... Я удалил несколько кодов ниже, чтобы уменьшить количество строк.

    $BootTime = GET-WmiObject win32_Operatingsystem -ComputerName $server -EA 
STOP | select @{n='ServerName';e={$_.csname}},@{n='LastBootUpTime';e={$_.ConverttoDateTime($_.lastbootuptime)}}                         ,@{n='LocalTime';e={$_.ConverttoDateTime($_.LocalDateTime)}} 


 $Disks = Get-WmiObject win32_logicaldisk -ComputerName $server -Filter Drivetype=3 |`
         Select-Object @{n = "Drive Letter";e = {$_.DeviceID}},`
                        @{n = "Total(GB)";e = {"{0:N1}" -f( $_.Size / 1gb)}},`
                        @{n = "FreeSpace(GB)";e = {"{0:N1}" -f( $_.Freespace / 1gb ) }},`
                        @{n = "FreeSpace(%)"; e = {"{0:P0}" -f ($_.freespace/$_.size)}}

New-Object -Type PSObject -Property @{
                        ServerName = $BootTime.Servername
                        LastBootTime = $BootTime.LastBootUptime
                        LocalTime = $BootTime.LocalTime 
                        UpTime = $BootTime.UpTime
                        OS = $BootTime.OS 
                        Domain = $Domain.Domain
                        Drive = $Disks."Drive Letter"
                        "Disks(GB)" = $Disks."Total(GB)"
                        "FreeSpace(GB)" = $Disks."FreeSpace(GB)"
                        "FreeSpace(%)" = $Disks."FreeSpace(%)"
                                                                            } 
                }
                CATCH
                {
New-Object -Type PSObject -Property @{
ServerName = $Server
LastBootTime = "Try Pinging"
LocalTime = "WMI Not Responding"
UpTime = "Possibly WMI not functioning or server is hung"#$null
OS = $null

Drive = $null
"Disks(GB)" = $null
"FreeSpace(GB)" = $null
"FreeSpace(%)" = $null
"Memory(GB)" =$null
PhysicalCPU = $null
  CPUName     = $null
  Cores       = $null
Manufacturer = $null 
Model = $null
                                                        } 

                }

            } 

    $Output| Select ServerName,LastBootTime, LocalTime, UpTime,Domain,OS, PhysicalCPU, CPUName, Cores, "Memory(GB)", Drive, "Disks(GB)", "FreeSpace(GB)", "FreeSpace(%)" , Manufacturer, Model



Current Results:
Drive         : {C:, E:, F:, G:...}
Disks(GB)     : {149.7, 500.0, 1,945.0, 1,024.0...}
FreeSpace(GB) : {90.0, 358.6, 1,411.1, 909.9...}
FreeSpace(%)  : {60%, 72%, 73%, 89%...}

Desired Results: 
Drive         : {C:, E:, F:, G:,H:}
Disks(GB)     : {149.7, 500.0, 1,945.0, 1,024.0,100}

OR
Drive1 : C:
Drive2:  D:
Disk(GB) 1 :149.7
Disk(GB) 2 : 500.0

1 Ответ

0 голосов
/ 13 июня 2019

Это будет мой ответ:

$server="localhost"
$BootTime = GET-WmiObject win32_Operatingsystem -ComputerName $server -EA STOP | select @{n='ServerName';e={$_.csname}},@{n='LastBootUpTime';e={$_.ConverttoDateTime($_.lastbootuptime)}},@{n='LocalTime';e={$_.ConverttoDateTime($_.LocalDateTime)}},Caption,OSArchitecture
$Disks = Get-WmiObject win32_logicaldisk -ComputerName $server -Filter Drivetype=3 | Select-Object @{n = "Drive Letter";e = {$_.DeviceID}},@{n = "Total(GB)";e = {"{0:N1}" -f( $_.Size / 1gb)}},@{n = "FreeSpace(GB)";e = {"{0:N1}" -f( $_.Freespace / 1gb ) }},@{n = "FreeSpace(%)"; e = {"{0:P0}" -f ($_.freespace/$_.size)}}

try{

    foreach($disk in $disks){
        New-Object -Type PSObject -Property @{
            ServerName = $BootTime.Servername
            LastBootTime = $BootTime.LastBootUptime
            LocalTime = $BootTime.LocalTime  
            #UpTime = $BootTime.UpTime #not in code
            OS = $BootTime.Caption
            OSArchitecture  = $BootTime.OSArchitecture
            Domain = $Domain.Domain
            "Letter"= $disk."Drive Letter"
            "Disk(GB)" = $disk."Total(GB)"
            "FreeSpace(GB)" = $disk."FreeSpace(GB)"
            "FreeSpace(%)" = $disk."FreeSpace(%)"
         }   
    }
}
CATCH{
    Write-Error $_.Exception.Message
    exit -1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...