2016-10-07 2 views
0

Я использую этот сценарий, чтобы получить основную информацию из виртуальных машин на нашем HyperV кластере:Powershell выход не форматировать правильно

#Establish global variables and MasterList array 
$VMList = Get-VM 
$MasterList = @() 

#Loop through VMs and get Name, Processor count, assigned memory, add to MasterList 
foreach($vm in $VMList) { 
$ALLVHD = Get-VHD $vm.harddrives.path -ComputerName $vm.computername 
$MyObject = New-Object PSObject -Property @{ 
    Name = ($vm).VMName 
    ProcessorCount = (Get-VMProcessor $vm).Count 
    AssignedMemory = ($vm).MemoryAssigned 
    DiskType = $VHD.VhdType 
    'Total(GB)' = [math]::Round($VHD.Size/1GB) 
    'Used(GB)' = [math]::Round($VHD.FileSize/1GB) 
    'Free(GB)' = [math]::Round($VHD.Size/1GB- $VHD.FileSize/1GB) 
} 

$MasterList += $MyObject 
} 
$MasterList | Out-GridView 

В основном это работает, но есть несколько проблем. Порядок столбцов неверен, он выводит DiskType, Name, AssignedMemory, Free (GB), ProcessorCount, Used (GB), Total (GB), и я не знаю, почему, потому что теперь это то, как это упорядочено в коде. Кроме того, бесплатные, используемые и общие суммы составляют 71, 29 и 100 для всех элементов, если это неверно.

Если кто-либо из экспертов Powershell может помочь мне в этом, он будет очень признателен.

+1

См [Изменить порядок столбцов в объекте] (// stackoverflow.com/a/19625107). – wOxxOm

+2

Где вы присвоили значение '$ VHD'? – PetSerAl

ответ

0

Я понял это, спасибо за предложения

#Establish global variables and MasterList array 
$VMList = Get-VM 
$MasterList = @() 

#Loop through all VMs on node 
foreach($vm in $VMList) { 

    $ALLVHD = Get-VHD $vm.HardDrives.path -ComputerName $vm.computername 

    foreach($VHD in $ALLVHD){ 
       $MyObject = New-Object PSObject -Property @{ 
        Name = $vm.Name 
        DiskType = $VHD.VhdType 
        Path = $VHD.Path 
        'Total(GB)' = [math]::Round($VHD.Size/1GB) 
        'Used(GB)' = [math]::Round($VHD.FileSize/1GB) 
        'Free(GB)' = [math]::Round($VHD.Size/1GB- $VHD.FileSize/1GB) 
        ProcessorCount = (Get-VMProcessor $vm).Count 
        AssignedMemory = ($vm).MemoryAssigned   
       } 
    #Add information to MasterList array 
    $Masterlist += $MyObject 
    } 
} 

#Change this line to print output however you want 
$MasterList | select Name,DiskType,Path,'Total(GB)','Used(GB)','Free(GB)',ProcessorCount,@{Expression={$_.AssignedMemory/1GB};Label="AssignedMemory(GB)"} 
Смежные вопросы