Example of using WMI to gather server information and publish in Word document.  To accompany article of Scripting Guy blog. The script shows how to use WMI to collect the information and how to use Word styles with PowerShell. The code assumes the use of Word 2013 but should work with earlier versions. The example also shows how to overcome the saveas issue when working with Word in PowerShell 3.0.

PowerShell
Edit|Remove
param ( 
[string]$computer=$env:COMPUTERNAME 
) 
function getos { 
param ( 
[Microsoft.Management.Infrastructure.CimSession] 
$CimSession 
) 
 
Get-CimInstance -ClassName Win32_OperatingSystem -CimSession $CimSession |  
select Caption, ServicePackMajorVersion, LastBootUpTime 
} 
 
function getcomp { 
param ( 
[Microsoft.Management.Infrastructure.CimSession] 
$CimSession 
) 
 
Get-CimInstance -ClassName Win32_ComputerSystem -CimSession $CimSession |  
select Manufacturer, Model, NumberOfProcessors, NumberOfLogicalProcessors 
} 
 
 
function getmem { 
param ( 
[Microsoft.Management.Infrastructure.CimSession] 
$CimSession 
) 
 
Get-CimInstance -ClassName Win32_PhysicalMemory -CimSession $CimSession | 
 Measure-Object -Property Capacity -Sum | 
 select @{N='RAM'; E={$_.Sum / 1gb}} 
} 
 
 
function getdisk { 
param ( 
[Microsoft.Management.Infrastructure.CimSession] 
$CimSession 
) 
 
Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" -CimSession $CimSession | 
select DeviceId, VolumeName, Size, FreeSpace 
}  
  
function getnic { 
param ( 
[Microsoft.Management.Infrastructure.CimSession] 
$CimSession 
) 
 
 Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true"  -CimSession $CimSession |  
 foreach { 
   select -InputObject $psitem -Property Description, IPAddress, IPSubnet,  
   DefaultIPGateway, DNSServerSearchOrder, MACAddress, 
   @{Name="Name";Expression={Get-CimInstance -ClassName  Win32_NetworkAdapter -Filter "DeviceId=$($_.Index)" | select -ExpandProperty NetConnectionID }} 
 } 
} 
 
function getserv { 
param ( 
[Microsoft.Management.Infrastructure.CimSession] 
$CimSession 
) 
 
Get-CimInstance -ClassName Win32_Service -CimSession $CimSession | select DisplayName, Name, StartMode, State, Status, StartName 
} 
 
function Add-Text { 
param ( 
 [string] $style = "Normal", 
 [string] $text  
) 
$paragraph = $doc.Content.Paragraphs.Add() 
$range = $paragraph.Range 
$paragraph.Range.Text = $Text 
$paragraph.Range.Style = $Style 
$paragraph.Range.InsertParagraphAfter() 
} 
 
 
$word = New-Object -ComObject "Word.application" 
$word.visible = $true 
$doc = $word.Documents.Add() 
$doc.Activate() 
 
$cimsess = New-CimSession -ComputerName $computer 
add-text -style "Title" -text $computer 
 
add-text -style "Heading 1" -text "Operating System" 
add-text -style "Normal" -text (getos  -CimSession $cimsess | format-list | out-string ) 
 
add-text -style "Heading 1" -text "Computer System" 
add-text -style "Normal" -text (getcomp -CimSession $cimsess | format-list | out-string ) 
 
add-text -style "Heading 1" -text "Memory" 
add-text -style "Normal" -text (getmem -CimSession $cimsess | format-list | out-string ) 
 
add-text -style "Heading 1" -text "Disk" 
add-text -style "Normal" -text (getdisk -CimSession $cimsess | format-list | out-string ) 
 
add-text -style "Heading 1" -text "Network Adapters" 
add-text -style "Normal" -text (getnic -CimSession $cimsess | format-list | out-string ) 
 
add-text -style "Heading 1" -text "Services" 
add-text -style "Normal" -text (getserv -CimSession $cimsess | format-list | out-string ) 
 
$file = [ref]"C:\Scripts\HSG\testreport.doc" 
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatDocument97"-as [ref] 
$doc.SaveAs($file$saveformat) 
 
$Word.Quit() 
$cimsess | Remove-CimSession