Всем привет.
Встала задача оперативно собрать информацию по HyperV виртуалкам. Задействуем Powershell. Оказалось что накидать парочку Get-запросов не проблема. Проблема больше коснулась самого экспорта данных, да так чтобы в Excel и чтобы было все красиво. В двух словах надо было слить воедино то что собирают 5 запросов в одну таблицу. При этом, как вы понимаете, получается десяток колонок с разными названиями, которые не хотели вливаться в единый CSV-файл.
В какой-то момент времени я понял, что значения хорошо вливаются если в CSV-файле уже есть колонка с нужным названием. То почему бы не сделать первую строку с нужными названиями (headers) изначально? Есть. Вторую строку делаем пустой, чуть ниже обьясню почему.
Ну тогда поехали, выполняем Get-запросы и наполняем наш CSV-файл:
# Get Hypername
$Hyper = $env:computername
# Set filename
$filename1 = 'd:\' + $Hyper + '.csv'
# Set headers
$str0 = '"Host","Host RAM(GB)","Name","State","Notes","Dynamic Memory","Start RAM(GB)","Min RAM(GB)","Max RAM(GB)","Assign RAM(GB)","vhdtype","vhdformat","Size VHD(GB)","path","IP","MacAddress","SwitchName","OperationMode","AccessVlanId","Status"'
# Output headers
$str0 | Out-File $filename1 -Encoding UTF8
',,,,,,,,,,,,,,,,,,,' | Out-File $filename1 -Append -Force -Encoding UTF8
# Get HyperV host
$str1 = Get-VMHost | Select @{Name="Host";Expression={$_.Name +'.'+ $_.FullyQualifiedDomainName}},@{label='Host RAM(GB)';expression={$_.MemoryCapacity/1gb -as [int]}}