Scenario: You want to export hardware inventory and Exchange settings from your Exchange Organization.
Script: You can copy all the script parts and run at once OR run each script part separately depending on what you want to achieve. You could also build on to this script using the same format with different get commands.
#Specify Variables
$today = (get-date -f yyyy-MM-dd)
$Folder = "C:TempCollection"
#Pull Exchange Server Hardware Inventory
$Servers = Get-ExchangeServer
$Servers | Export-csv $folder$today-Get-ExchangeServer.csv
($servers).name | Out-File $folder$today-Servers.txt
$serverList = "$folder$today-Servers.txt"
$outputCSV = "$folder$today-ServerInventory.csv"
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
pushd $dir
[System.Collections.ArrayList]$sysCollection = New-Object System.Collections.ArrayList($null)
foreach ($server in (Get-Content $serverList))
{
"Collecting information from $server"
$totCores=0
try
{
[wmi]$sysInfo = get-wmiobject Win32_ComputerSystem -Namespace "rootCIMV2" -ComputerName $server -ErrorAction Stop
[wmi]$bios = Get-WmiObject Win32_BIOS -Namespace "rootCIMV2" -computername $server
[wmi]$os = Get-WmiObject Win32_OperatingSystem -Namespace "rootCIMV2" -Computername $server
#[array]$disks = Get-WmiObject Win32_LogicalDisk -Namespace "rootCIMV2" -Filter DriveType=3 -Computername $server
[array]$disks = Get-WmiObject Win32_LogicalDisk -Namespace "rootCIMV2" -Computername $server
[array]$procs = Get-WmiObject Win32_Processor -Namespace "rootCIMV2" -Computername $server
[array]$mem = Get-WmiObject Win32_PhysicalMemory -Namespace "rootCIMV2" -ComputerName $server
[array]$nic = Get-WmiObject Win32_NetworkAdapterConfiguration -Namespace "rootCIMV2" -ComputerName $server | where{$_.IPEnabled -eq "True"}
$si = @{
Server = [string]$server
Manufacturer = [string]$sysInfo.Manufacturer
Model = [string]$sysInfo.Model
TotMem = "$([string]([System.Math]::Round($sysInfo.TotalPhysicalMemory/1gb,2))) GB"
BiosDesc = [string]$bios.Description
BiosVer = [string]$bios.SMBIOSBIOSVersion+"."+$bios.SMBIOSMajorVersion+"."+$bios.SMBIOSMinorVersion
BiosSerial = [string]$bios.SerialNumber
OSName = [string]$os.Name.Substring(0,$os.Name.IndexOf("|") -1)
Arch = [string]$os.OSArchitecture
Processors = [string]@($procs).count
Cores = [string]$procs[0].NumberOfCores
NIC = [string]$nic[0].IPAddress
}
$disks | foreach-object {$si."Drive$($_.Name -replace ':', '')"="$([string]([System.Math]::Round($_.Size/1gb,2))) GB"}
}
catch [Exception]
{
"Error communicating with $server, skipping to next"
$si = @{
Server = [string]$server
ErrorMessage = [string]$_.Exception.Message
ErrorItem = [string]$_.Exception.ItemName
}
Continue
}
finally
{
[void]$sysCollection.Add((New-Object PSObject -Property $si))
}
}
$sysCollection `
| select-object Server,NIC,TotMem,OSName,Arch,Processors,Cores,Manufacturer,Model,BiosDesc,BiosVer,BiosSerial,DriveA,DriveB,DriveC,DriveD,DriveE,DriveF,DriveG,DriveH,DriveI,DriveJ,DriveK,DriveL,DriveM,DriveN,DriveO,DriveP,DriveQ,DriveR,DriveS,DriveT,DriveU,DriveV,DriveW,DriveX,DriveY,DriveZ,ErrorMessage,ErrorItem `
| sort -Property Server `
| Export-CSV -path $outputCSV -NoTypeInformation
#Export ClientAccess Settings
$CASServers = Get-ClientAccessServer
$CASServers | %{Get-OWAVirtualDirectory -server $_.name | Export-csv $folder$today-Get-OWAVirtualDirectory.csv -append}
$CASServers | %{Get-ECPVirtualDirectory -server $_.name | Export-csv $folder$today-Get-ECPVirtualDirectory.csv -append}
$CASServers = Get-ClientAccessServer
$CASServers | %{Get-OWAVirtualDirectory -server $_.name | Export-csv $folder$today-Get-OWAVirtualDirectory.csv -append}
$CASServers | %{Get-ECPVirtualDirectory -server $_.name | Export-csv $folder$today-Ge$CASServers | %{Get-OABVirtualDirectory -server $_.name | Export-csv $folder$today-Get-OABVirtualDirectory.csv -append}
$CASServers | %{Get-MAPIVirtualDirectory -server $_.name | Export-csv $folder$today-Get-MAPIVirtualDirectory.csv -append}
$CASServers | %{Get-WebServicesVirtualDirectory -server $_.name | Export-csv $folder$today-Get-ServicesVirtualDirectory.csv -append}
$CASServers | %{Get-ActivesyncVirtualDirectory -server $_.name | Export-csv $folder$today-Get-EASVirtualDirectory.csv -append}
$CASServers | %{Get-OutlookAnywhere -server $_.name | Export-csv $folder$today-Get-OutlookAnywhere.csv -append}
#Export Database Settings
$DB = Get-mailboxdatabase
$DB | Export-csv $folder$today-Get-MailboxDatabase.csv -append
#Export DAG Settings
$DAG = Get-DatabaseAvailabilityGroup
$DAG | Export-csv $folder$today-Get-DatabaseAvailabilityGroup.csv