So here is the script so far, however I don't know how to include the virtual machine name next to each result. I've tried to add $_.Name (see ** areas) but this doesn't work. I've also noticed another script extracted the MAC address and IP address of the VM, this would be ideal (again see **). Could someone please point me in the right direction to get that VM name info into the CSV file, Much Appreciated.
# Import VMware PowerCLI module
Import-Module -Name VMware.VimAutomation.Core
# Input the export CSV path
$exportPath = "E:\VLAN_$(Get-Date -Format "yyMMdd_hh-mm-ss").csv"
# vCenter Server credentials
$vcServer = "vcenter"
$vcUsername = "$vcUsername"
$vcPassword = "pass"
$credentials = New-Object System.Management.Automation.PSCredential ($vcUsername,(ConvertTo-
SecureString $vcPassword -AsPlainText -Force))
# Connect to vCenter
Connect-VIServer -Server $vcServer -Credential $credentials
# Get all distributed and standard switches
$distSwitches = Get-VDSwitch
$standSwitches = Get-VirtualSwitch
# Get VM and Adapter Info
**$myvmname = Get-VM -Name $vmName**
**$myNetworkAdapters = $vmname | Get-NetworkAdapter**
# Initialize data array
$data = @()
# Loop through all distributed switches
foreach ($dSwitch in $distSwitches) {
$networks = $dSwitch | Get-VDPortgroup
foreach ($network in $networks) {
# If network name contains "CORP" and VLAN ID is 100
if ($network.VLanId -eq 100 -and $network.Name -like "*CORP*") {
$data += New-Object PSObject -Property @{
"vCenter" = $vcServer
"Host" = $ESXHost
"VMName" = $vm.Name
"SwitchName" = $dSwitch.Name
"NetworkName" = $network.Name
"VlanId" = $network.VLanId
"SwitchType" = "Distributed"
}
}
}
}
# Loop through all standard switches
foreach ($sSwitch in $standSwitches) {
$networks = $sSwitch | Get-VirtualPortGroup
foreach ($network in $networks) {
# If network name contains "CORP" and VLAN ID is 100
if ($network.VLanId -eq 100 -and $network.Name -like "*CORP*") {
$data += New-Object PSObject -Property @{
"vCenter" = $vcServer
"Host" = $ESXHost
"VMName" = $vm.Name
"SwitchName" = $dSwitch.Name
"NetworkName" = $network.Name
"VlanId" = $network.VLanId
"SwitchType" = "Standard"
}
}
}
}
# Export data to CSV
$data | Export-Csv -Path $exportPath -NoTypeInformation
# Disconnect from vCenter
Disconnect-VIServer -Server $vcServer -Confirm:$false
The reason why I require this information is so that I can report on the virtual machines that are configured with these VLAN's and export it out on a daily basis. Then I'll do a comparison of the latest and previous file to see if there has been any recent changes, this is notified within a changes.csv file with a Side Indicator => or <=.
Hope this helps understand the reasoning behind this requirement.